|
|
@@ -133,3 +133,30 @@ _-_
|
|
|
- позволяет ослабить связанность между подсистемой и ее клиентами. Зачастую компоненты подсистемы сильно связаны. Слабая связанность позволяет видоизменять компоненты, не затрагивая при этом клиентов
|
|
|
- фасад не препятствует приложениям напрямую обращаться к классам подсистемы, если это необходимо. Таким образом, у вас есть выбор между простотой и общностью.
|
|
|
|
|
|
+# [Приспособленец (Flyweight)](./flyweight/main.kt)
|
|
|
+
|
|
|
+Это структурный паттерн проектирования, который позволяет вместить бóльшее количество объектов в отведённую оперативную память.
|
|
|
+Применяет совместное использование для эффективной поддержки множества мелких объектов.
|
|
|
+
|
|
|
+## Другое название
|
|
|
+Легковес (Flyweight)
|
|
|
+
|
|
|
+## Применимость
|
|
|
+
|
|
|
+Применяйте этот паттерн, когда выполнены все нижеперечисленные условия:
|
|
|
+
|
|
|
+- в приложении используется большое число объектов
|
|
|
+- из-за этого затраты на хранение высоки
|
|
|
+- большую часть состояния объектов можно вынести вовне
|
|
|
+- многие группы объектов можно заменить относительно небольшим количеством совместно используемых объектов, поскольку внешнее состояние вынесено
|
|
|
+- приложение не зависит от идентичности объекта. Поскольку объекты-приспособленцы могут использоваться совместно, то проверка на идентичность возвратит признак истинности для концептуально различных объектов
|
|
|
+
|
|
|
+## Отношения
|
|
|
+
|
|
|
+- состояние, необходимое приспособленцу для нормальной работы, классифицируется на внутреннее или внешнее. Внутреннее состояние хранится в самом объекте ConcreteFlyweight. Внешнее состояние хранится или вычисляется клиентами. Клиент передает его приспособленцу при вызове операций
|
|
|
+- клиенты не должны создавать экземпляры класса TreeType напрямую, а могут получать их только от объекта TreeFactory. Это позволит гарантировать корректное совместное использование.
|
|
|
+
|
|
|
+## Результаты
|
|
|
+
|
|
|
+При использовании приспособленцев возможны затраты на передачу, поиск или вычисление внутреннего состояния на стадии выполнения, особенно если раньше оно хранилось как внутреннее. Однако такие затраты с лихвой компенсируются экономией памяти за счет совместного использования объектов-приспособленцев.
|
|
|
+
|