Есть ли название для этого «шаблона»? - PullRequest
0 голосов
/ 29 января 2020

Недавно я столкнулся с ситуацией, когда было полезно создать версию класса с отложенной загрузкой, обернув его фабрику.

Я хотел бы провести небольшое исследование, чтобы выяснить, есть ли какие-либо проблемы, с которыми я сталкиваюсь. раньше я не думал, что слишком сильно на него полагаюсь, но я не знаю, что искать.

edit: в моем случае это создание файлов cookie и файлов сеансов, которые мне не нужны делать, пока учетные данные пользователя не проверены.

interface FooInterface
{
    public function bar();
}

class Foo implements FooInterface
{
    public function bar()
    {
        ...
    }
}

interface FooFactoryInterface
{
    public function getFoo():FooInterface;
}

class FooFactory
{
    public function getFoo():FooInterface
    {
        return new Foo(...);
    }
}

class LazyFoo implements FooInterface
{
    protected
        $foo=null,
        $factory;
    public function __construct(FooFactoryInterface $factory)
    {
        $this->factory=$factory;
    }
    public function bar()
    {
        if($this->foo===null) $this->foo=$this->factory->getFoo();
        return $this->foo->bar();
    }
}

1 Ответ

0 голосов
/ 29 января 2020

Это известно как шаблон прокси в сочетании с абстрактным фабричным шаблоном , поскольку целью этого конкретного прокси является задержка самой реализации путем ленивой инициализации . Я сомневаюсь, что эта комбинация достаточно распространена, чтобы иметь собственное имя. Обычно проблема решается простой задержкой вызова самого метода фабрики, выполняющей ленивую инициализацию в коде, который фактически использует объект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...