Рисунок фасада - Facade pattern

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

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

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

Обзор

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

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

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

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

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

Определите Facade объект, который

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

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

Применение

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

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

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

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

Структура

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

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

В UML диаграммы классов , то Client класс не доступа к классам подсистемы непосредственно. Вместо этого, Client работает через Facade класс , который реализует простой интерфейс с точки зрения (путем делегирования) классов подсистемы ( Class1 , Class2 и Class3 ). Это Client зависит только от простого Facade интерфейса и не зависит от сложной подсистемы.

Диаграмма последовательности показывает , что во время выполнения взаимодействие: На Client объекте работает через Facade объект , который делегирует запрос к Class1 , Class2 и Class3 экземплярам , которые выполняют запрос.

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

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

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

пример

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

C ++

struct CPU {
  void Freeze();
  void Jump(long position);
  void Execute();
};

struct HardDrive {
  char* Read(long lba, int size);
};

struct Memory {
  void Load(long position, char* data);
};

class ComputerFacade {
 public:
  void Start() {
    cpu_.Freeze();
    memory_.Load(kBootAddress, hard_drive_.Read(kBootSector, kSectorSize));
    cpu_.Jump(kBootAddress);
    cpu_.Execute();
  }

 private:
  CPU cpu_;
  Memory memory_;
  HardDrive hard_drive_;
};

int main() {
  ComputerFacade computer;
  computer.Start();
}

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

Рекомендации

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