Шаблон проектирования "Фасад"
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/