Комментарий 5 лет спустя...) Спасибо за видео. Небольшой нюанс, разве это абстрактная фабрика, мне кажется это просто фабрика она же factory method.
@artempryzhkov28188 жыл бұрын
Отличная серия, жду твоей реализации Interpreter
@agnar878 Жыл бұрын
Тут 2 паттерна синглтон и фабрика. И никакая не абстрактная, а самая обычная. Основная суть легковеса(хз, откуда приспособленец вылез), экономить память за счет хранения обших для обьектов ресурсов. А тут просто обьекты не создаются, если уже созданы. Как-бы разные вещи. Убрать отсюда фабрику и будет типичный снглтон. Убрать синглтон и будет просто фабрика. Суть паттерна не раскрыта. А вот в примерах которые вы разбираете дальше, как раз есть корректный пример.
@Smolandgor8 жыл бұрын
Вообще что бы проверить лежит ли что то в мапе можно и containsKey() или containsValue() заюзать.
@ttttt51918 жыл бұрын
Вряд ли flyweight переводится так))
@off67975 жыл бұрын
Легковес. Приспособленец видимо придумали русаки.
@damirdamir83883 жыл бұрын
flyweight - вес мухи)))
@UstinBelarus7 жыл бұрын
ты в примере создаёшь 3 круга с радиусов = 5, объект создаётся только для первого круга, и в 2-х следующих операциях он переиспользуется - это понятно. А что если нам необходим круг с любым другим радиусом ? Круг с радиусом 6, создаст новый объект ?
@rustammurtazin32657 жыл бұрын
Да, или создать метод, чтобы задать радиус перед отрисовкой.
@lichlichi6 жыл бұрын
Нет, создание такового невозможно в рамках этого кода и паттерна в принципе. По ключу "круг" map имеет 1 объект-экземпляр с радиусом 5. В List добавляются 3 ссылки на этот экземпляр. Если использовать get метод, то вернётся старый добрый круг с радиусом 5. Для изменения этого значения его необходимо вывести как внешнее значение, а не внутреннее. Либо оформить новый , отдельный от этого класс. Вариант с установкой радиуса как отдельного метода не подходит под этот паттерн, так как тут либо разделяй на внешнее(контроль радиуса будет через параметр в draw) и внутреннее состояние , либо не используй этот паттерн вовсе. Если же тебе всё же необходимо изменять с каждой надобностью объекта класса "круг" его внутреннее значение, то посмотри другие паттерны. Его применяемость на практике довольно таки мала, он очень радко где используется.
@alext7118 жыл бұрын
Спасибо!)
@lichlichi6 жыл бұрын
А разве это не Фактори метод используется на диаграмме?)
@nickcoffeemaniac64766 жыл бұрын
В реальных ситуациях почти всегда используются комбинации шаблонов, это норма, лишь бы код был эффективным, удобным и легкочитаемым. Пардон за некропостинг, если что...
@61DANTE8 жыл бұрын
я что-то не понимаю, или как в shapes(final Map) запихиваются фигуры? там же константа должна быть, при попытке изменить final объект дожна быть ошибка, а мы тут как раз вставляем фигуры
@BogdanShulga7 жыл бұрын
В данном случае shapes это сслыка на объект типа MAP который хранится в пямяти. И final говорит, что мы не можем shapes`ам присвоить новую ссылку(тоесть заменить объект сделав new HashMap()). Но нам ни кто не мешает изменять состояние данного объекта. А в качестве состояния у него выступает "грубо говоря!" массив в который мы можем ложить обекты flyweight в любом количестве.
@alexeystaroverov48047 жыл бұрын
эээ, ты вообще в курсе, что в map не могут храниться 2 одинаковых ключа? ))) то есть не надо проверять, есть ли он там уже ))) а надо переопределить equals и hashmap ))) и он автоматически не будет туда попадать ) паттерны ты знаешь, но вот коллекции - это ппц ))) Т.е просто создаешь фигуру и пытаешься ее запихать в map, она туда не полезет, если уже там есть. А чтобы не создавались много однотипных фигур, юзай синглтон
@lichlichi6 жыл бұрын
Проверка на наличие сделана для того, что бы не перезаписать существующий(если он там окажется). Если он там уже есть, то значит нужно его просто получить(не резервируя на точно такой же объект память) для каких то вызовов. В данном случае экземпляр круга в List только 1, а объектов 3. Но пагубным является то, что при изменении какого либо из 3 "кругов", значение поменяют и остальные. Всё равно синглтоны необходимо будет хранить где то, здесь это удобнее + синглтон можно сериализовать а затем десериализовать и получить 2 синглтон(речь о стандартной его реализации) , так как синглтон своё создание контролирует сам, а здесь эту роль принимает Фабрика. Проблематика этого паттерна немного в другом. Он помогает использовать уже созданное, под разные задачи а не резервировать память заново. Например что бы написать слово в комментарий, я использую буквы(объекты в map) из алфавита(сам map, из примера).