Фасадный рисунок
Шаблон фасада (также пишется как фасад ) — это шаблон проектирования программного обеспечения, обычно используемый в объектно-ориентированном программировании . Аналогично фасаду в архитектуре, это объект , который служит внешним интерфейсом, маскирующим более сложный базовый или структурный код. Фасад может:
- улучшить читабельность и удобство использования библиотеки программного обеспечения, маскируя взаимодействие с более сложными компонентами за единым (и часто упрощенным) интерфейсом прикладного программирования (API).
- предоставить контекстно-зависимый интерфейс для более общих функций (в комплекте с контекстно-зависимой проверкой ввода )
- служить отправной точкой для более широкого рефакторинга монолитных . или сильно связанных систем в пользу более слабосвязанного кода
Разработчики часто используют шаблон проектирования фасада, когда система очень сложна или сложна для понимания, поскольку в системе имеется множество взаимозависимых классов или ее исходный код недоступен. Этот шаблон скрывает сложности более крупной системы и обеспечивает более простой интерфейс для клиента. Обычно он включает в себя один класс-оболочку , который содержит набор членов, требуемых клиенту. Эти участники получают доступ к системе от имени фасадного клиента и скрывают детали реализации.
Обзор
[ редактировать ]Фасад [ 1 ] шаблон проектирования — один из двадцати трех известных Шаблоны проектирования GoF которые описывают, как решать повторяющиеся проблемы проектирования для разработки гибкого и многократно используемого объектно-ориентированного программного обеспечения, то есть объектов, которые легче реализовать, изменить, протестировать и повторно использовать.
Какие проблемы может решить шаблон проектирования «Фасад»? [ 2 ]
- Чтобы упростить использование сложной подсистемы, для набора интерфейсов в подсистеме должен быть предусмотрен простой интерфейс.
- Зависимость от подсистемы должна быть минимизирована.
Клиенты, которые обращаются к сложной подсистеме, напрямую ссылаются на множество различных объектов, имеющих разные интерфейсы (зависят от них), что затрудняет реализацию, изменение, тестирование и повторное использование клиентов.
Какое решение описывает шаблон проектирования «Фасад»?
Определите Facade
возразить, что
- реализует простой интерфейс с точки зрения (путем делегирования) интерфейсов в подсистеме и
- может выполнять дополнительные функции до/после пересылки запроса.
Это позволяет работать через Facade
объект, чтобы минимизировать зависимости от подсистемы.
См. также класс UML и диаграмму последовательности ниже.
Использование
[ редактировать ]Фасад используется, когда требуется более легкий или простой интерфейс к базовому объекту. [ 3 ] В качестве альтернативы можно использовать адаптер , когда оболочка должна соблюдать определенный интерфейс и поддерживать полиморфное поведение. Декоратор . позволяет добавлять или изменять поведение интерфейса во время выполнения
Шаблон | Намерение |
---|---|
Адаптер | Преобразует один интерфейс в другой, чтобы он соответствовал ожиданиям клиента. |
Декоратор | Динамически добавляет ответственности к интерфейсу путем переноса исходного кода. |
Фасад | Обеспечивает упрощенный интерфейс |
Рисунок фасада обычно используется, когда
- для доступа к сложной системе необходим простой интерфейс,
- система очень сложна или трудна для понимания,
- необходима точка входа для каждого уровня многоуровневого программного обеспечения или
- абстракции и реализации подсистемы тесно связаны.
Структура
[ редактировать ]Класс UML и диаграмма последовательности
[ редактировать ]В этой UML классов диаграмме
тот Client
class не имеет прямого доступа к классам подсистемы.
Вместо этого Client
работает через Facade
класс, который реализует простой интерфейс с точки зрения (путем делегирования) классов подсистемы ( Class1
, Class2
, и Class3
).
Client
зависит только от простого Facade
интерфейс
и не зависит от сложной подсистемы. [ 4 ]
Диаграмма последовательности
показывает взаимодействие во время выполнения: Client
объект
работает через Facade
объект, который делегирует запрос
тот Class1
, Class2
, и Class3
экземпляры, выполняющие запрос.
Диаграмма классов UML
[ редактировать ]- Фасад
- Класс фасада абстрагирует пакеты 1, 2 и 3 от остальной части приложения.
- Клиенты
- Объекты используют шаблон фасада для доступа к ресурсам из пакетов.
Пример
[ редактировать ]Это абстрактный пример того, как клиент («вы») взаимодействует с фасадом («компьютером») сложной системы (внутренние части компьютера, такие как процессор и жесткий диск).
С++
[ редактировать ]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();
}
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Эрих Гамма, Ричард Хелм, Ральф Джонсон, Джон Влиссидес (1994). Шаблоны проектирования: элементы объектно-ориентированного программного обеспечения многократного использования . Эддисон Уэсли. стр. 185 и далее . ISBN 0-201-63361-2 .
{{cite book}}
: CS1 maint: несколько имен: список авторов ( ссылка ) - ^ «Шаблон проектирования фасада – проблема, решение и применимость» . w3sDesign.com . Проверено 12 августа 2017 г.
- ^ Фриман, Эрик; Фриман, Элизабет; Сьерра, Кэти; Бейтс, Берт (2004). Хендриксон, Майк; Лукидес, Майк (ред.). Шаблоны проектирования Head First (мягкая обложка) . Том. 1. О'Рейли. стр. 243, 252, 258, 260. ISBN. 978-0-596-00712-6 . Проверено 2 июля 2012 г.
- ^ «Шаблон проектирования фасада — структура и взаимодействие» . w3sDesign.com . Проверено 12 августа 2017 г.
Внешние ссылки
[ редактировать ]
