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

Шаблон проектирования "Прототип"

11 декабря 2018

Относится к порождающим шаблонам.

Помогает избежать затрат на создание объектов стандартным способом, а вместо этого создаёт прототип и затем клонирует его.

Плюсы:
- меньше повторяющегося кода инициализации объектов.
- ускоряет создание объектов.

Минусы:
- сложно клонировать составные объекты, имеющие ссылки на другие объекты.
 

Создадим прототип книги детективного жанра:

abstract class BookPrototype
{
    protected $title;

    protected $category;

    abstract public function __clone();

    public function getTitle()
    {
        return $this->title;
    }

    public function setTitle($title)
    {
        $this->title = $title;
    }
}

class DetectiveBookPrototype extends BookPrototype
{
    protected $category = 'DetectiveBook';

    public function __clone()
    {
        // ...
    }
}

 

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

$bookPrototype = new DetectiveBookPrototype();

for ($i = 0; $i < 100; $i++) {
    $book = clone $bookPrototype;
    $book->setTitle('Detective Book № ' . $i);
}



Источники:

http://designpatternsphp.readthedocs.io/ru/latest/Creational/Prototype/README.html