|
|
@@ -58,4 +58,28 @@
|
|
|
|
|
|
- отделение реализации от интерфейса
|
|
|
- повышение степени расширяемости
|
|
|
-- сокрытие деталей реализации от клиентов
|
|
|
+- сокрытие деталей реализации от клиентов
|
|
|
+
|
|
|
+# [Компоновщик (Composite)](./composite/main.kt)
|
|
|
+
|
|
|
+Это структурный паттерн проектирования, который позволяет сгруппировать множество объектов в древовидную структуру, а затем работать с ней так, как будто это единичный объект.
|
|
|
+
|
|
|
+## Применимость
|
|
|
+
|
|
|
+- требуется представить иерархию объектов вида «часть — целое»
|
|
|
+- клиенты должны по единым правилам работать с составными и индивидуальными объектами
|
|
|
+
|
|
|
+## Отношения
|
|
|
+
|
|
|
+Клиенты используют интерфейс класса Graphic для взаимодействия с объектами в составной структуре. Если получателем запроса является листовый объект (Dot, Circle), то он и обрабатывает запрос. Когда же получателем является составной объект CompoundGraphic, то обычно он перенаправляет запрос своим потомкам — возможно, с выполнением некоторых дополнительных операций до или после перенаправления.
|
|
|
+
|
|
|
+## Результаты
|
|
|
+
|
|
|
+- определяет иерархии классов, состоящие из примитивных и составных объектов
|
|
|
+- упрощает архитектуру клиента
|
|
|
+- облегчает добавление новых видов компонентов. Новые подклассы классов CompoundGraphic или Dot, Circle будут автоматически работать с уже существующими структурами и клиентским кодом.
|
|
|
+- способствует созданию общего дизайна
|
|
|
+
|
|
|
+**_Важно_**
|
|
|
+
|
|
|
+Иногда бывает нужно, чтобы составной объект мог включать только определенные виды компонентов. Паттерн компоновщик не позволяет воспользоваться для реализации таких ограничений статической системой типов. Вместо этого приходится проводить проверки во время выполнения.
|