Образец фасада - Facade pattern

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

  • улучшить читаемость и удобство использования библиотека программного обеспечения путем маскировки взаимодействия с более сложными компонентами за одним (и часто упрощенным) API
  • предоставить контекстно-зависимый интерфейс для более общих функций (в комплекте с контекстно-зависимым вводом Проверка )
  • служить отправной точкой для более широкого рефакторинг из монолитный или тесно связанных систем в пользу большего слабо связанный код

Разработчики часто используют шаблон проектирования фасада, когда система очень сложна или трудна для понимания, потому что система имеет много взаимозависимых классов или потому что ее исходный код недоступен. Этот шаблон скрывает сложность более крупной системы и обеспечивает более простой интерфейс для клиента. Обычно это один класс-оболочка который содержит набор членов, необходимых клиенту. Эти члены получают доступ к системе от имени клиента фасада и скрывают детали реализации.

Обзор

Фасад[1]шаблон дизайна - один из двадцати трех хорошо известных Шаблоны проектирования GoF которые описывают, как решать повторяющиеся проблемы проектирования для разработки гибкого и многократно используемого объектно-ориентированного программного обеспечения, то есть объектов, которые легче реализовать, изменить, протестировать и повторно использовать.

Какие проблемы может решить шаблон проектирования фасада?[2]

  • Чтобы упростить использование сложной подсистемы, необходимо предоставить простой интерфейс для набора интерфейсов в подсистеме.
  • Следует минимизировать зависимости от подсистемы.

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

Какое решение описывает шаблон проектирования фасада?

Определить Фасад возражать, что

  • реализует простой интерфейс с точки зрения (путем делегирования) интерфейсов в подсистеме и
  • может выполнять дополнительные функции до / после пересылки запроса.

Это позволяет работать через Фасад объект, чтобы минимизировать зависимости от подсистемы.
См. Также схему классов и последовательности UML ниже.

Применение

Фасад используется, когда требуется более простой или простой интерфейс для базового объекта.[3] В качестве альтернативы адаптер может использоваться, когда оболочка должна уважать определенный интерфейс и поддерживать полиморфный поведение. А декоратор позволяет добавлять или изменять поведение интерфейса во время выполнения.

ШаблонНамерение
АдаптерПреобразует один интерфейс в другой, чтобы он соответствовал ожиданиям клиента.
ДекораторДинамически добавляет ответственности к интерфейсу, упаковывая исходный код
ФасадПредоставляет упрощенный интерфейс

Рисунок фасада обычно используется, когда

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

Структура

Схема классов и последовательности UML

Схема классов паттернов дизайна фасада
Схема последовательности шаблонов проектирования фасадов
Пример класса UML и диаграмма последовательности для шаблона проектирования фасадов.

В этом UML диаграмма классов, то Клиент не имеет прямого доступа к классам подсистем. Клиент работает через Фасад класс, который реализует простой интерфейс с точки зрения (путем делегирования) классов подсистем (Класс1, Класс2, и Класс 3). Клиент зависит только от простого Фасад интерфейс и не зависит от сложной подсистемы.[4]

Диаграмма последовательности показывает взаимодействия во время выполнения: Клиент объект работает через Фасад объект, который делегирует запрос Класс1, Класс2, и Класс 3экземпляры, выполняющие запрос.

Диаграмма классов UML

Пример шаблона проектирования фасада в UML.png

Фасад
Класс фасада абстрагирует пакеты 1, 2 и 3 от остальной части приложения.
Клиенты
Объекты используют шаблон фасада для доступа к ресурсам из пакетов.

пример

Это абстрактный пример того, как клиент («вы») взаимодействует с фасадом («компьютер») сложной системы (внутренние части компьютера, такие как ЦП и жесткий диск).

C ++

структура ЦПУ {  пустота Заморозить();  пустота Прыгать(длинная должность);  пустота Выполнить();};структура Жесткий диск {  char* Читать(длинная lba, int размер);};структура объем памяти {  пустота Загрузить(длинная должность, char* данные);};класс КомпьютерФасад { общественный:  пустота Начните() {    ЦПУ_.Заморозить();    объем памяти_.Загрузить(kBootAddress, жесткий диск_.Читать(kBootSector, kSectorSize));    ЦПУ_.Прыгать(kBootAddress);    ЦПУ_.Выполнить();  } частный:  ЦПУ ЦПУ_;  объем памяти объем памяти_;  Жесткий диск жесткий диск_;};int основной() {  КомпьютерФасад компьютер;  компьютер.Начните();}

Смотрите также

использованная литература

  1. ^ Эрих Гамма, Ричард Хелм, Ральф Джонсон, Джон Влиссидес (1994). Паттерны проектирования: элементы объектно-ориентированного программного обеспечения многократного использования. Эддисон Уэсли. стр.185ff. ISBN  0-201-63361-2.CS1 maint: несколько имен: список авторов (ссылка на сайт)
  2. ^ «Шаблон проектирования фасада - проблема, решение и применимость». w3sDesign.com. Получено 2017-08-12.
  3. ^ Фриман, Эрик; Фриман, Элизабет; Сьерра, Кэти; Бейтс, Берт (2004). Хендриксон, Майк; Лукидес, Майк (ред.). Шаблоны проектирования Head First (мягкая обложка). 1. О'Рейли. С. 243, 252, 258, 260. ISBN  978-0-596-00712-6. Получено 2012-07-02.
  4. ^ «Шаблон проектирования фасада - структура и взаимодействие». w3sDesign.com. Получено 2017-08-12.

внешние ссылки