Паттерн проектирования "Приспособленец" (Flyweight)

В случае использования структурного шаблона проектирования "Приспособленец", объект, который представляет себя в разных местах программы как уникальный экземпляр, по факту таковым не является.

В качестве примера можно привести заказ молочного коктейля в кафе. Представьте, что вы отстояли большую очередь жарким летом и, наконец-то, добрались до прилавка, где заказали стакан коктейля. Продавец, получив очередной заказ, готовит не один стакан, а сразу большую емкость, взбивая коктейль на специальном оборудовании. Для чего это делается, я думаю, понятно -- сразу готовится коктейль и кому-нибудь еще, кто стоит в очереди за вами. Таким образом экономится не только время, но и ресурсы, например, электричество. Так вот, электрические ресурсы, которые делятся (sharing), в нашем случае и являются приспособленцами.

Аналогичный пример из жизни -- покупка чая в уличном ларьке на массовом мероприятии (сразу заваривается большой объем чая, что избавляет от необходимости постоянно заваривать отдельный стаканчик для каждого покупателя).

Если вернуться к программированию, то можно сказать, что "Приспособленец" применяется в целях минимизации использования памяти/вычислительной стоимости посредством разделения ресурсов с максимальным числом схожих объектов.

Давайте рассмотрим, как это выглядит в коде. Возьмем за основу последний пример с чаем. Итак, в самом начале у нас существуют различные виды -- это Tea и TeaMaker:

Кроме того, существует TeaShop, где заказы принимаются и обрабатываются:

Ну и непосредственный пример использования:

Пожалуй, на этом все. Также вы можете посмотреть пример реализации шаблона "Приспособленец" на языке программирования Java.

По материалам https://github.com/kamranahmedse/design-patterns-for-humans.