Структурные шаблоны проектирования
Фасад
Когда требуется обеспечить унифицированный интерфейс с набором разнообразных реализаций или зависимых интерфейсов, например, с подсистемой, когда нежелательно допускать высокое связывание с этой подсистемой или реализация подсистемы может измениться, используют шаблон "Фасад".
Назначение паттерна "Фасад"– упростить работу с существующей системой, определив собственный интерфейс обращения к ней. При этом определяемый интерфейс должен использовать только определенное множество функций системы или организовать взаимодействие с ней неким специфическим образом.
Реализация этого шаблона определяет точку взаимодействия с подсистемой – фасадный объект, обеспечивающий общий интерфейс, взаимодействующий с компонентами.
Реализация других компонентов подсистемы закрыта и не видна внешним компонентам. Фасадный объект обеспечивает реализацию паттерна "Устойчивый к изменениям".
В основе реализации шаблона лежит определение нового класса (или классов) с требуемым интерфейсом, которые должны опираться на функциональные возможности существующей системы.
"Фасад" может применяться не только для создания упрощенного интерфейса с целью вызова методов, но и для уменьшения количества объектов, с которыми клиенту приходится взаимодействовать.
Этот шаблон также может использоваться для сокрытия или инкапсуляции базовой системы. В этом случае профильные классы включают основную систему как свой закрытый компонент. Поэтому основная система будет взаимодействовать только с "Фасадом", оставаясь недоступной и невидимой для всех остальных пользователей.
Подобная реализация может быть использована для обеспечения следующих требований:
- Контроль за использованием системы:
- Вынуждая пользователей все обращения к системе выполнять только через фасад, легко можно контролировать их доступ к ней.
- Упрощение замены системы:
- В будущем может потребоваться заменить существующую систему новой. Для этих целей "Фасад" может использоваться как место агрегации наиболее полезных методов заменяемой системы с последующим переносом в новую.
- Представление базовой системы как закрытого компонента.
В основном шаблон "Фасад" используется в тех случаях, когда необходим новый способ взаимодействия с системой – более простой в сравнении с уже существующим.
"Фасад" упрощает использование сложной системы, отдельной части системы или обеспечивает обращение к системе некоторым специфическим образом. В результате применения шаблона "Фасад" мы получим новую, более простую в использовании систему, которая будет точно соответствовать нашим потребностям.
Применение шаблона "Фасад" наиболее востребовано в следующих условиях:
- Когда нет необходимости использовать все функциональные возможности сложной системы и можно создать новый класс, который будет содержать все необходимые средства доступа к базовой системе.
- Если предполагается работа лишь с ограниченным набором функций исходной системы.
- Когда существует необходимость в инкапсуляции первоначальной системы.
- Если требуется не только использовать существующие функциональные возможности базовой системы, но и дополнить их некоторой новой функциональностью.
Заключение о структурных шаблонах
В этой главе мы рассмотрели структурные шаблоны проектирования.Их основной обязанностью является ответственность за построение классов программного обеспечения,удобных в поддержке иерархий.Основная ценность данной группы паттернов начинает проявляться в момент технического проектирования, упрощая варианты реализации путем выявления простого способа реализации отношений между информационными субъектами.
Структурные шаблоны проектирования решают задачу компоновки системы на основе классов и объектов. При этом могут использоваться следующие механизмы:
- Наследование. Базовый класс определяет интерфейс, а подклассы –его реализацию.
- Структуры на основе наследования получаются статичными.
- Композиция.
- Структуры строятся путем объединения объектов некоторых классов.
- Композиция позволяет получать структуры, которые можно изменять во время выполнения, и пр.
Структурные паттерны описывают создание сложных и комплексных объектов, оптимизируют взаимодействие между разными системными компонентами.
Выводы
В этой главе мы рассмотрели одну из самых сложных групп шаблонов, которые во многом предопределяют структурную целостность программного обеспечения в рамках выбранной архитектурной модели.
Используя структурные шаблоны в практической деятельности при разработке программного обеспечения, можно добиться высоких результатов в создании качественных информационных систем.
Применение структурных шаблонов может гарантировать снижение количества ресурсов на непосредственный процесс разработки за счет реализации универсальных системных компонентов, вероятность повторного использования которых очень высока.
В следующей главе мы приступим к изучению не менее интересных поведенческих паттернов.