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

Шаблон проектирования "Заместитель"

12 ноября 2017

Частым применением данного шаблона является "ленивая загрузка" ("lazy load").


Пусть имеется интерфейс IData и класс Data

interface IData {
    public function calc($x);
}

class Data implements IData
{
    public function __construct() {
        ... // ресурсоемкие вычисления
    }

    public function calc($x = 0)
    {
       ...
    }
}

 

Создадим "DataProxy":

class DataProxy implements IData
{
    protected $data = null;

    public function calc($x = 0)
    {
        if ($this->data === null) {
            $this->data = new Data();
        }

        return $this->data->calc($x);
    }
}

 

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

$proxy = new DataProxy();
$proxy->calc(5); // Выполняются ресурсоемкие вычисления
$proxy->calc(10); // Используются ранее рассчитанные значения



Источники:

http://designpatternsphp.readthedocs.io/ru/latest/Structural/Proxy/README.html
https://habrahabr.ru/company/mailru/blog/325492/