Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОТВЕТЫ к экз по ООП.docx
Скачиваний:
4
Добавлен:
17.07.2019
Размер:
40.99 Кб
Скачать
  1. Порождающие паттерны

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

Таким образом получаем архитектурное решение, дизайн, который не зависит от способа создания, представления объектов. Т.е. участники могут быть созданы разными способами: непосредственное кодирование (компиляция и добавление) этих объектов, либо композиция, агрегация из уже имеющихся и т.д.

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

Самыми простыми словами все это можно описать так: любым способом создаются объекты или классы, реализующие утвержденные паттерном интерфейсы, либо наследующие определенные абстрактные классы, дальше все это просто передается на «вход» системы, которая, используя определенные в тех интерфейсах контракты (поля и методы), - реализует свои бизнес задачи системы своего уровня.

Гибкость таких паттернов выражается в том, что неважно «что», «кем» и «когда» создается , главное в итоге – просто создать готовых участников, имеющих известные контракты взаимодействия и передать их дальше.

При этом ничто не ограничивает в способах: можно создать всех этих участников статически на этапе компиляции (нельзя будет их изменить не перекомпилируя код данного уровня), либо динамически – на этапе выполнения (можно будет менять данный набор участников, например, в зависимости от содержания конфигурационный файлов).

  1. Структурные паттерны

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

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

Вообще, все структурные паттерны похожи между собой, особенно когда речь идет об их участниках и взаимодействиях. Вероятное объяснение такому явлению: все структурные паттерны основаны на небольшом множестве языковых механизмов структурирования кода и объектов (одиночном и множественном наследовании для паттернов уровня класса и композиции для паттернов уровня объектов). Но имеющееся сходство может быть обманчиво, ибо с помощью разных паттернов можно решать совершенно разные задачи.

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