Статья
Шаблон проектирования "Фасад"

Шаблон проектирования "Фасад"

1 февраля 2020

Относится к структурным шаблонам.

Предоставляет упрощённый интерфейс для сложной подсистемы.

Плюсы:
- возможность предоставить простой интерфейс к сложной подсистеме;

Пример на PHP

Пусть имеется класс SecuritySystem

class SecuritySystem
{
    public function enableHallSecuritySystem()
    {
    }

    public function enableBathroomSecuritySystem()
    {
    }

    public function enableDiningRoomSecuritySystem()
    {
    }

    public function enableLobbySecuritySystem()
    {
    }

    public function disableHallSecuritySystem()
    {
    }

    public function disableBathroomSecuritySystem()
    {
    }

    public function disableDiningRoomSecuritySystem()
    {
    }

    public function disableLobbySecuritySystem()
    {
    }
}


Создадим "Фасад", включающий или выключающий охрану всего дома:

class SecuritySystemFacade
{
    protected $system;

    public function __construct(SecuritySystem $system)
    {
        $this->system = $system;
    }

    public function turnOn()
    {
        $this->system->enableHallSecuritySystem();
        $this->system->enableBathroomSecuritySystem();
        $this->system->enableDiningRoomSecuritySystem();
        $this->system->enableLobbySecuritySystem();
    }

    public function turnOff()
    {
        $this->system->disableHallSecuritySystem();
        $this->system->disableBathroomSecuritySystem();
        $this->system->disableDiningRoomSecuritySystem();
        $this->system->disableLobbySecuritySystem();
    }
}


Использование:

$system = new SecuritySystemFacade(new SecuritySystem());
$system->turnOn();
$system->turnOff();


Пример на Go
 

package main

func main() {
   system := SecuritySystem{}
   facade := SecuritySystemFacade{system: system}
   facade.TurnOn()
   facade.TurnOff()
}

type SecuritySystem struct {
}

type SecuritySystemFacade struct {
   system SecuritySystem
}

func (s *SecuritySystem) enableHallSecuritySystem() {
}

func (s SecuritySystem) enableDiningRoomSecuritySystem() {
}

func (s *SecuritySystem) enableBathroomSecuritySystem() {
}

func (s *SecuritySystem) enableLobbySecuritySystem() {
}

func (s *SecuritySystem) disableHallSecuritySystem() {
}

func (s *SecuritySystem) disableDiningRoomSecuritySystem() {
}

func (s *SecuritySystem) disableBathroomSecuritySystem() {
}

func (s *SecuritySystem) disableLobbySecuritySystem() {
}

func (s *SecuritySystemFacade) TurnOn() {
   s.system.enableHallSecuritySystem()
   s.system.enableBathroomSecuritySystem()
   s.system.enableDiningRoomSecuritySystem()
   s.system.enableLobbySecuritySystem()
}

func (s *SecuritySystemFacade) TurnOff() {
   s.system.disableHallSecuritySystem()
   s.system.disableBathroomSecuritySystem()
   s.system.disableDiningRoomSecuritySystem()
   s.system.disableLobbySecuritySystem()
}


Источники:
http://designpatternsphp.readthedocs.io/ru/latest/Structural/Facade/README.html
https://habrahabr.ru/company/mailru/blog/325492/