Фасад

Аналогія

Як увімкнути комп'ютер? Ви скажете: "Натиснути кнопку увімкнення". Це тому, що ви використовуєте простий інтерфейс, наданий комп'ютером назовні. А в ньому відбувається дуже багато процесів. Простий інтерфейс для складної підсистеми – це фасад.

Стисло

Шаблон Фасад надає спрощений інтерфейс для складної підсистеми.

Вікіпедія

«Фасад» — це об'єкт, що надає спрощений інтерфейс для більшого тіла коду, наприклад бібліотеки класів.

Приклад

Створимо клас computer:

class Computer
{
    public function getElectricShock()
    {
        echo "Ouch!";
    }

    public function makeSound()
    {
        echo "Beep beep!";
    }

    public function showLoadingScreen()
    {
        echo "Loading..";
    }

    public function bam()
    {
        echo "Ready to be used!";
    }

    public function closeEverything()
    {
        echo "Bup bup bup buzzzz!";
    }

    public function sooth()
    {
        echo "Zzzzz";
    }

    public function pullCurrent()
    {
        echo "Haaah!";
    }
}

Тепер «фасад»:

class ComputerFacade
{
    protected $computer;

    public function __construct(Computer $computer)
    {
        $this->computer = $computer;
    }

    public function turnOn()
    {
        $this->computer->getElectricShock();
        $this->computer->makeSound();
        $this->computer->showLoadingScreen();
        $this->computer->bam();
    }

    public function turnOff()
    {
        $this->computer->closeEverything();
        $this->computer->pullCurrent();
        $this->computer->sooth();
    }
}

Використання:

$computer = New ComputerFacade(New Computer());
$computer->turnOn(); // Ouch! Beep beep! Loading.. Ready to be used!
$computer->turnOff(); // Bup bup buzzz! Haah! Zzzzz