Шаблон фасада (также пишется как фасад ) — это шаблон проектирования программного обеспечения , обычно используемый в объектно-ориентированном программировании . Аналогично фасаду в архитектуре, это объект , который служит в качестве интерфейса, маскирующего более сложный базовый или структурный код. Фасад может:
Разработчики часто используют шаблон проектирования фасада, когда система очень сложна или трудна для понимания, поскольку в системе много взаимозависимых классов или ее исходный код недоступен. Этот шаблон скрывает сложности более крупной системы и предоставляет клиенту более простой интерфейс. Обычно он включает в себя один класс-оболочку , который содержит набор членов, требуемых клиентом. Эти члены получают доступ к системе от имени клиента фасада и скрывают детали реализации.
Шаблон проектирования Facade [1] — один из двадцати трех известных шаблонов проектирования GoF , описывающих, как решать повторяющиеся проблемы проектирования для разработки гибкого и повторно используемого объектно-ориентированного программного обеспечения, то есть объектов, которые проще реализовывать, изменять, тестировать и повторно использовать.
Какие проблемы может решить шаблон проектирования «Фасад»? [2]
Клиенты, которые обращаются к сложной подсистеме, напрямую ссылаются (зависят от) на множество различных объектов, имеющих различные интерфейсы (тесная связь), что затрудняет реализацию, изменение, тестирование и повторное использование клиентов.
Какое решение описывает шаблон проектирования «Фасад»?
Определите Facade
объект, который
Это позволяет работать через Facade
объект, чтобы минимизировать зависимости от подсистемы.
См. также класс UML и диаграмму последовательности ниже.
Фасад используется, когда требуется более простой или легкий интерфейс к базовому объекту. [3] В качестве альтернативы, адаптер может использоваться, когда оболочка должна учитывать определенный интерфейс и поддерживать полиморфное поведение. Декоратор позволяет добавлять или изменять поведение интерфейса во время выполнения.
Фасадный узор обычно используется, когда
В этой диаграмме классов UML класс не имеет прямого доступа к классам подсистемы. Вместо этого работает через класс, который реализует простой интерфейс в терминах (делегируя) классов подсистемы ( , , и ). Зависит только от простого интерфейса и не зависит от сложной подсистемы. [4]Client
Client
Facade
Class1
Class2
Class3
Client
Facade
Диаграмма последовательности показывает взаимодействия во время выполнения: Client
объект работает через Facade
объект, который делегирует запрос экземплярам Class1
, Class2
и , Class3
которые выполняют запрос.
Это абстрактный пример того, как клиент («вы») взаимодействует с фасадом («компьютером») сложной системы (внутренними частями компьютера, такими как ЦП и жесткий диск).
struct CPU { void Freeze (); void Jump ( длинная позиция ); void Execute (); }; struct HardDrive { char * Read ( long lba , int size ); }; struct Memory { void Load ( длинная позиция , 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_ ; Жесткий диск hard_drive_ ; }; int main () { ComputerFacade компьютер ; компьютер . Start (); }
{{cite book}}
: CS1 maint: несколько имен: список авторов ( ссылка )