Фасад (шаблон проектирования)

Материал из Википедии — свободной энциклопедии

Перейти к: навигация, поиск

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

Содержание

[править] Описание

Изображение:facade.gif

[править] Проблема

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

[править] Решение

Определить одну точку взаимодействия с подсистемой — фасадный объект, обеспечивающий общий интерфейс с подсистемой и возложить на него обязанность по взаимодействию с её компонентами. Фасад — это внешний объект, обеспечивающий единственную точку входа для служб подсистемы. Реализация других компонентов подсистемы закрыта и не видна внешним компонентам. Фасадный объект обеспечивает реализацию паттерна Устойчивый к изменениям (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.


структурные шаблоны проектирования

адаптер | мост | компоновщик | декоратор | фасад | заместитель | приспособленец