Прототип (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.
Коли використовувати?
Коли необхідний об'єкт аналогічний вже існуючому або коли створення з нуля дорожче за клонування.