diff --git a/README.md b/README.md index 5fc9f8d..2178d4c 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,8 @@ 1. [Декоратор](decorator/) 2. [Адаптер](adapter/) -2. [Фасад](facade/) +3. [Фасад](facade/) +4. [Компоновщик](composite/) ### Пораждающие diff --git a/composite/README.md b/composite/README.md new file mode 100644 index 0000000..2c8d9a7 --- /dev/null +++ b/composite/README.md @@ -0,0 +1,13 @@ +# Компоновщик + +Структурный паттерн проектирования, который позволяет сгруппировать множество объектов в древовидную структуру, а затем работать с ней так, как будто это единичный объект. + +Паттерн **Компоновщик** объединяет объекты в древовидные структуры для представления иерархий «часть/целое». Компоновщик позво­ляет клиенту выполнять однородные операции с отдельными объектами и их совокупностями. + +Можно сказать, что пат­терн Компоновщик нарушает принцип одной обязанности ради ***прозрачности***. Что такое «прозрачность»? Благодаря тому, что были включены в интерфейс Component операции управле­ния как дочерними узлами, так ***и*** листьями, клиент выполняет одинаковые операции с комбинациями и листовыми узлами. Та­ким образом, вид узла становится прозрачным для клиента. Од­нако при этом приходится частично жертвовать ***безопасностью***, потому что клиент может попытаться выполнить с элементом неподходящую или бессмысленную операцию (например, по­пытаться добавить меню в листовой элемент). Речь идет о со­знательном архитектурном решении. + +## Схемы + +![scheme-1](scheme-1.png) + +![scheme-2](scheme-2.png) diff --git a/composite/scheme-1.png b/composite/scheme-1.png new file mode 100644 index 0000000..af8fa02 Binary files /dev/null and b/composite/scheme-1.png differ diff --git a/composite/scheme-2.png b/composite/scheme-2.png new file mode 100644 index 0000000..fb619c5 Binary files /dev/null and b/composite/scheme-2.png differ