Прототип (Prototype)

Аналогія

Пам'ятаєте клоновану овечку Доллі? Так ось, цей шаблон проектування присвячений клонування.

Коротко

Об'єкт створюється у вигляді клонування існуючого об'єкта.

Вікіпедія

Шаблон «Прототип» використовується, коли типи об'єктів, що створюються, визначаються екземпляром-прототипом, клонованим для створення нових об'єктів. Тобто шаблон дозволяє дублювати існуючий об'єкт та модифікувати копію відповідно до потреб. Без проблем зі створенням об'єкта з нуля та його налаштуванням.

Приклад

У PHP це легко можна зробити за допомогою clone:

class Sheep
{
    protected $name;
    protected $category;

    public function __construct(string $name, string $category = 'Mountain Sheep')
    {
        $this->name = $name;
        $this->category = $category;
    }

    public function setName(string $name)
    {
        $this->name = $name;
    }

    public function getName()
    {
        return $this->name;
    }

    public function setCategory(string $category)
    {
        $this->category = $category;
    }

    public function getCategory()
    {
        return $this->category;
    }
}

Потім можна клонувати так:

$original = новий Sheep('Jolly');
echo $original->getName(); // Джоллі
echo $original->getCategory(); // Гірська овечка

// Клонуйте та модифікуйте, що потрібно
$cloned = clone $original;
$cloned->setName('Dolly');
echo $cloned->getName(); // Доллі
echo $cloned->getCategory(); // Гірська овечка

Також для модифікації процедури клонування можна звернутися до магічного методу __clone.

Коли використовувати?

Коли необхідний об'єкт аналогічний вже існуючому або коли створення з нуля дорожче за клонування.