Skip to content

Latest commit

 

History

History

facade

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 

Паттерн "Фасад"

Определение

Предоставляет унифицированный интерфейс к группе интерфейсов подсистемы. Фасад определяет высокоуровневый интерфейс, упрощающий работу с подсистемой.

Описание примера

В качестве примера используется система домашнего кинотеатра, состоящая из DVD-плеера, усилителя, проектора, экрана, освещения и аппарата для приготовления попкорна. У каждого устройства свой интерфейс. Чтобы посмотреть фильм нужно проделать ряд операций:

  1. Включить аппарат для попкорна.
  2. Запустить приготовление попкорна.
  3. Выключить свет.
  4. Опустить экран.
  5. Включить проектор.
  6. Связать вход проектора с выходом DVD.
  7. Включить широкоформатный режим на проекторе.
  8. Включить усилитель.
  9. Связать вход усилителя с выходом DVD.
  10. Включить на усилителе режим окружающего звука.
  11. Установить на усилителе нужную громкость.
  12. Включить DVD-проигрыватель.
  13. Включить воспроизведение на DVD-проигрывателе.

Для выключение необходимо проделать примерно такой же объем операций.

В данном примере фасад реализует всего два метода: WatchMovie и EndMovie. В фасад встраиваются все компоненты подсистемы, а в WatchMovie и EndMovie вызываются необходимые методы встроенных компонентов.

Таким образом, для просмотра фильма клиенту не нужно вызывать целый список методов, а нужно вызвать лишь один метод фасада. Клиент перестает зависеть от каждого компонентна системы, а начинает зависеть лишь от фасада. Это позволяет спокойно менять компоненты, не меняя при этом код клиента. Вместе с этим, сама система все еще доступна на более низком уровне, чтоб иметь возможность производить более точную настройку.

Ключевые моменты

  1. Если понадобится упростить большой интерфейс или семейство сложных интерфейсов - используйте фасад.
  2. Фасад изолирует клиента от сложной подсистемы.
  3. Реализация фасада основана на композиции и делегировании.
  4. Для подсистемы можно реализовать несколько фасадов.