PHP шаблоны: Prototype (генерация объектов)

PHPКомментариев нет

Проблема:

Требуется добавить большой объем данных в базу данных, при условии что мы используем ORM.

Решение:

[file: BookPrototype.php] — абстрактный класс, который будет клонировать другие объекты которые являются прототипом BookPrototype(наследуют данный абстрактный класс).

<?php

abstract class BookPrototype
{
    protected $title;

    abstract public function __clone();

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

[file: BarBookPrototype.php] — тип книги «Bar», которые наследуют прототип книги

<?php

class BarBookPrototype extends BookPrototype
{
    
    protected $title = 'Bar';

    public function __clone()
    {
    }
}

[file: FooBookPrototype.php] — тип книги «Foo», которые наследуют прототип книги

<?php

class FooBookPrototype extends BookPrototype
{    
    protected $title = 'Foo';

    public function __clone()
    {
    }
}

Применение

$fooPrototype = new FooBookPrototype();
$barPrototype = new BarBookPrototype();

for ($i = 0; $i < 10; $i++) {
    $book = clone $fooPrototype;
    $book->getTitle();
}

for ($i = 0; $i < 5; $i++) {
    $book = clone $barPrototype;
    $book->getTitle();
}

 

Минусы:

Объекты клонируются в текущем состоянии, в котором и были созданы(допустим с теми же установленными свойствами что были установлены при инициализации). Об этом стоит постоянно помнить. Для обнуления свойств объекта можно использовать встроенный метод __clone().

Плюсы:

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

 

Источник: https://designpatternsphp.readthedocs.io/ru/latest/Creational/Prototype/README.html


Комментарии закрыты!