Фасад (шаблон проектирования)
Материал из Википедии — свободной энциклопедии
Шаблон Facade (Фасад) — Шаблон проектирования, позволяющий скрыть сложность системы путем сведения всех возможных внешних вызовов к одному объекту, делегирующему их соответствующим объектам системы.
Содержание |
[править] Описание
[править] Проблема
Как обеспечить унифицированный интерфейс с набором разрозненных реализаций или интерфейсов, например, с подсистемой, если нежелательно высокое связывание с этой подсистемой или реализация подсистемы может измениться?
[править] Решение
Определить одну точку взаимодействия с подсистемой — фасадный объект, обеспечивающий общий интерфейс с подсистемой и возложить на него обязанность по взаимодействию с её компонентами. Фасад — это внешний объект, обеспечивающий единственную точку входа для служб подсистемы. Реализация других компонентов подсистемы закрыта и не видна внешним компонентам. Фасадный объект обеспечивает реализацию паттерна Устойчивый к изменениям (Protected Variations) с точки зрения защиты от изменений в реализации подсистемы.
[править] Особенности применения
Шаблон применяется для установки некоторого рода политики по отношению к другой группе объектов. Если политика должна быть яркой и заметной, следует воспользоваться услугами шаблона Фасад. Если же необходимо обеспечить скрытность и аккуратность (прозрачность), более подходящим выбором является шаблон Заместитель (Proxy).
[править] Примеры
[править] JavaScript
/* Complex parts */ function SubSystem1() { this.method1 = function() { alert("вызван SubSystem1.method1"); }; } function SubSystem2() { this.method2 = function() { alert("вызван SubSystem2.method2"); }; this.methodB = function() { alert("вызван SubSystem2.methodB"); }; } /* Facade */ function Facade() { var s1 = new SubSystem1(); var s2 = new SubSystem2(); this.m1 = function() { alert("вызван Facade.m1"); s1.method1(); s2.method2(); }; this.m2 = function() { alert("вызван Facade.m2"); s2.methodB(); }; } /* Client */ function Test() { var facade = new Facade(); facade.m1(); facade.m2(); } var obj = new Test(); /* Выведет: "вызван Facade.m1" "вызван SubSystem2.method1" "вызван SubSystem2.method2" "вызван Facade.m2" "вызван SubSystem2.methodB" */
[править] Источники и ссылки
- Gamma и др. Design Patterns. Reading. MA: Addison-Wesley, 1995.
| структурные шаблоны проектирования |
|
адаптер | мост | компоновщик | декоратор | фасад | заместитель | приспособленец |


