Шаблон проектирования Фасад. Pattern Facade.
Всем привет. Сегодня мы рассмотрим шаблон проектирования "Фасад"(Pattern Facade). Он очень прост для понимания и осмысления, но на практике его применить достаточно сложно.
Описание
Суть его заключается в том, чтобы сделать общий интерфейс для подсистем. К примеру, рассмотрим стиральную машинку. У нее есть множество разных подсистем: регулировка воды, сушилка, отжим, поворот барабана и другие. Однако, пользователю они не нужны. Зачем нам, к примеру, подсистема поворота барабана? Правильно, она нам не нужна. Все, что нам нужно, это выставить температуру и нажать кнопку. В некоторых машинах достаточно выбрать тип белья, и она автоматически подберет наилучшую температуру. Вот эта наша кнопка запуска и есть фасад - общий интерфейс, который сам управляет подсистемами.
Пример кода реализации
<?php
class CPU {
public function fz() { /* code... */}
public function leap($pos) { /* code... */}
public function performance() { /* code... */}
}
class Memory {
public function charge($pos, $info) { /* code... */}
}
class HardDrive {
public function lection($lba, $scale) { /* code... */}
}
class Computer {
protected $cpu;
protected $memory;
protected $hardDrive;
public function __construct() {
$this->cpu = new CPU();
$this->memory = new Memory();
$this->hardDrive = new HardDrive();
}
public function startComputer() {
$this->cpu->fz();
$this->memory->charge( BOOT_ADDRESS, $this->hardDrive->lection(b_sector, sector_s);
$this->cpu->leap(adress);
$this->cpu->performance();
}
}
$facade = new Computer();
$facade->startComputer();
?>
Как видите, у нас есть несколько классов, несколько подсистем компьютера: CPU, Memory, HardDrive. За что они отвечают, думаю, понятно. Однако, зачем они нам все по отдельности, верно? Вот, чтобы избавиться от этого, мы создаем наш фасад - Computer, в котором создаем метод startComputer, который будет использовать подсистемы для запуска компьютера.
Для понимания этот шаблон очень прост, вся сложность заключается в применении его на практике, потому что трудно найти все эти зависимости, подсистемы, которые можно объединить в один фасад. Однако, если вы нашли такие зависимости у себя в коде и их у вас уже больше 10 штук, то следут создавать фасад.
Итак, на этом все для сегодняшней статьи. Спасибо за внимание!
-
- Михаил Русаков
Комментарии (2):
Спасибо за статью! А грамотно ли будет этот паттерн использовать при создании движка? То есть есть, например, шаблонизатор, класс для работы с бд, роутер и.т.д. а с помощью общего класса запускать их как единую систему?
Ответить
Да, вполне возможно.
Ответить
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.