Шаблоны Java. Приспособленец (Flyweight)

  Рет қаралды 8,368

Vladimir Vysokomornyi

Vladimir Vysokomornyi

Күн бұрын

Пікірлер: 17
@RussianCyclop
@RussianCyclop 3 жыл бұрын
Комментарий 5 лет спустя...) Спасибо за видео. Небольшой нюанс, разве это абстрактная фабрика, мне кажется это просто фабрика она же factory method.
@artempryzhkov2818
@artempryzhkov2818 8 жыл бұрын
Отличная серия, жду твоей реализации Interpreter
@agnar878
@agnar878 Жыл бұрын
Тут 2 паттерна синглтон и фабрика. И никакая не абстрактная, а самая обычная. Основная суть легковеса(хз, откуда приспособленец вылез), экономить память за счет хранения обших для обьектов ресурсов. А тут просто обьекты не создаются, если уже созданы. Как-бы разные вещи. Убрать отсюда фабрику и будет типичный снглтон. Убрать синглтон и будет просто фабрика. Суть паттерна не раскрыта. А вот в примерах которые вы разбираете дальше, как раз есть корректный пример.
@Smolandgor
@Smolandgor 8 жыл бұрын
Вообще что бы проверить лежит ли что то в мапе можно и containsKey() или containsValue() заюзать.
@ttttt5191
@ttttt5191 8 жыл бұрын
Вряд ли flyweight переводится так))
@off6797
@off6797 5 жыл бұрын
Легковес. Приспособленец видимо придумали русаки.
@damirdamir8388
@damirdamir8388 3 жыл бұрын
flyweight - вес мухи)))
@UstinBelarus
@UstinBelarus 7 жыл бұрын
ты в примере создаёшь 3 круга с радиусов = 5, объект создаётся только для первого круга, и в 2-х следующих операциях он переиспользуется - это понятно. А что если нам необходим круг с любым другим радиусом ? Круг с радиусом 6, создаст новый объект ?
@rustammurtazin3265
@rustammurtazin3265 7 жыл бұрын
Да, или создать метод, чтобы задать радиус перед отрисовкой.
@lichlichi
@lichlichi 6 жыл бұрын
Нет, создание такового невозможно в рамках этого кода и паттерна в принципе. По ключу "круг" map имеет 1 объект-экземпляр с радиусом 5. В List добавляются 3 ссылки на этот экземпляр. Если использовать get метод, то вернётся старый добрый круг с радиусом 5. Для изменения этого значения его необходимо вывести как внешнее значение, а не внутреннее. Либо оформить новый , отдельный от этого класс. Вариант с установкой радиуса как отдельного метода не подходит под этот паттерн, так как тут либо разделяй на внешнее(контроль радиуса будет через параметр в draw) и внутреннее состояние , либо не используй этот паттерн вовсе. Если же тебе всё же необходимо изменять с каждой надобностью объекта класса "круг" его внутреннее значение, то посмотри другие паттерны. Его применяемость на практике довольно таки мала, он очень радко где используется.
@alext711
@alext711 8 жыл бұрын
Спасибо!)
@lichlichi
@lichlichi 6 жыл бұрын
А разве это не Фактори метод используется на диаграмме?)
@nickcoffeemaniac6476
@nickcoffeemaniac6476 6 жыл бұрын
В реальных ситуациях почти всегда используются комбинации шаблонов, это норма, лишь бы код был эффективным, удобным и легкочитаемым. Пардон за некропостинг, если что...
@61DANTE
@61DANTE 8 жыл бұрын
я что-то не понимаю, или как в shapes(final Map) запихиваются фигуры? там же константа должна быть, при попытке изменить final объект дожна быть ошибка, а мы тут как раз вставляем фигуры
@BogdanShulga
@BogdanShulga 7 жыл бұрын
В данном случае shapes это сслыка на объект типа MAP который хранится в пямяти. И final говорит, что мы не можем shapes`ам присвоить новую ссылку(тоесть заменить объект сделав new HashMap()). Но нам ни кто не мешает изменять состояние данного объекта. А в качестве состояния у него выступает "грубо говоря!" массив в который мы можем ложить обекты flyweight в любом количестве.
@alexeystaroverov4804
@alexeystaroverov4804 7 жыл бұрын
эээ, ты вообще в курсе, что в map не могут храниться 2 одинаковых ключа? ))) то есть не надо проверять, есть ли он там уже ))) а надо переопределить equals и hashmap ))) и он автоматически не будет туда попадать ) паттерны ты знаешь, но вот коллекции - это ппц ))) Т.е просто создаешь фигуру и пытаешься ее запихать в map, она туда не полезет, если уже там есть. А чтобы не создавались много однотипных фигур, юзай синглтон
@lichlichi
@lichlichi 6 жыл бұрын
Проверка на наличие сделана для того, что бы не перезаписать существующий(если он там окажется). Если он там уже есть, то значит нужно его просто получить(не резервируя на точно такой же объект память) для каких то вызовов. В данном случае экземпляр круга в List только 1, а объектов 3. Но пагубным является то, что при изменении какого либо из 3 "кругов", значение поменяют и остальные. Всё равно синглтоны необходимо будет хранить где то, здесь это удобнее + синглтон можно сериализовать а затем десериализовать и получить 2 синглтон(речь о стандартной его реализации) , так как синглтон своё создание контролирует сам, а здесь эту роль принимает Фабрика. Проблематика этого паттерна немного в другом. Он помогает использовать уже созданное, под разные задачи а не резервировать память заново. Например что бы написать слово в комментарий, я использую буквы(объекты в map) из алфавита(сам map, из примера).
Шаблоны Java. Одиночка (Singleton)
31:02
Vladimir Vysokomornyi
Рет қаралды 18 М.
Шаблоны Java. Фабричный метод (Factory Method)
18:04
Vladimir Vysokomornyi
Рет қаралды 42 М.
How Many Balloons To Make A Store Fly?
00:22
MrBeast
Рет қаралды 163 МЛН
Creative Justice at the Checkout: Bananas and Eggs Showdown #shorts
00:18
Fabiosa Best Lifehacks
Рет қаралды 28 МЛН
Муж внезапно вернулся домой @Oscar_elteacher
00:43
История одного вокалиста
Рет қаралды 7 МЛН
Шаблоны Java. Прокси / Заместитель (Proxy / Surrogate)
17:03
Шаблоны Java. Состояние (State)
18:41
Vladimir Vysokomornyi
Рет қаралды 11 М.
Шаблоны Java. Стратегия (Strategy)
18:05
Vladimir Vysokomornyi
Рет қаралды 15 М.
Паттерн Factory Method, Фабричный метод, С#, Unity
12:10
Шаблоны Java. Посетитель (Visitor)
29:35
Vladimir Vysokomornyi
Рет қаралды 9 М.
Шаблоны Java. AbstractFactory (Абcтрактная фабрика)
14:34
Шаблоны Java. Строитель (Builder)
19:36
Vladimir Vysokomornyi
Рет қаралды 26 М.
Шаблоны Java. Proxy (Прокси)
7:01
Eugene Suleimanov
Рет қаралды 27 М.
7 Лет Опыта в IT | Что я Понял?
19:56
Vlad Mishustin
Рет қаралды 233 М.
How Many Balloons To Make A Store Fly?
00:22
MrBeast
Рет қаралды 163 МЛН