Главная страница
Навигация по странице:

  • дерева

  • Продукты

  • Коробки

  • Продукт

  • Применимость.

  • простые

  • Недостатки: Создаёт слишком общий дизайн классов. Отношения с другими паттернами. Компоновщик

  • Легковесом

  • Декоратор

  • Компоновщик

  • Структурные паттерны проектирования «Компоновщик». Структурные паттерны проектирования Компоновщик


    Скачать 16.51 Kb.
    НазваниеСтруктурные паттерны проектирования Компоновщик
    Дата26.09.2021
    Размер16.51 Kb.
    Формат файлаdocx
    Имя файлаСтруктурные паттерны проектирования «Компоновщик».docx
    ТипДокументы
    #237061

    Структурные паттерны проектирования «Компоновщик»


    Компоновщик — это структурный паттерн проектирования, который позволяет сгруппировать множество объектов в древовидную структуру, а затем работать с ней так, как будто это единичный объект.

    Данный Паттерн имеет смысл только тогда, когда основная модель вашей программы может быть структурирована в виде дерева.

    Например, есть два объекта: Продукт и КоробкаКоробка может содержать несколько Продуктов и других Коробок поменьше. Те, в свою очередь, тоже содержат либо Продукты, либо Коробки и так далее.

    Теперь предположим, ваши Продукты и Коробки могут быть частью заказов. Каждый заказ может содержать как простые Продукты без упаковки, так и составные Коробки. Ваша задача состоит в том, чтобы узнать цену всего заказа.

    Компоновщик предлагает рассматривать Продукт и Коробку через единый интерфейс с общим методом получения стоимости.

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

    Аналогия. Армии большинства государств могут быть представлены в виде перевёрнутых деревьев. На нижнем уровне у вас есть солдаты, затем взводы, затем полки, а затем целые армии. Приказы отдаются сверху и спускаются вниз по структуре командования, пока не доходят до конкретного солдата.

    Применимость. Паттерн Компоновщик предлагает хранить в составных объектах ссылки на другие простые или составные объекты. Те, в свою очередь, тоже могут хранить свои вложенные объекты и так далее. В итоге вы можете строить сложную древовидную структуру данных, используя всего две основные разновидности объектов.

     Благодаря тому, что простые и составные объекты реализуют общий интерфейс, клиенту безразлично, с каким именно объектом ему предстоит работать.

    Преимущества:

    1. Упрощает архитектуру клиента при работе со сложным деревом компонентов;

    2. Облегчает добавление новых видов компонентов.

    Компоновщик'>Недостатки:

    1. Создаёт слишком общий дизайн классов.

    Отношения с другими паттернами.

    • Компоновщик часто совмещают с Легковесом, чтобы реализовать общие ветки дерева и сэкономить при этом память.

    • Компоновщик и Декоратор имеют похожие структуры классов из-за того, что оба построены на рекурсивной вложенности. Она позволяет связать в одну структуру бесконечное количество объектов.

    Декоратор оборачивает только один объект, а узел Компоновщика может иметь много детей. Декоратор добавляет вложенному объекту новую функциональность, а Компоновщик не добавляет ничего нового, но «суммирует» результаты всех своих детей.

    Но они могут и сотрудничать: Компоновщик может использовать Декоратор, чтобы переопределить функции отдельных частей дерева компонентов.

    • Архитектура, построенная на Компоновщиках и Декораторах, часто может быть улучшена за счёт внедрения Прототипа. Он позволяет клонировать сложные структуры объектов, а не собирать их заново.


    написать администратору сайта