Prototype (Прототип)

Prototype (Прототип) относиться к классу порождающих паттернов. Он используется для задания вида создаваемых объектов на основе объекта прототипа, от которого происходит передача внутреннего состояния. Он сродни фабричному методу, позволяет избавиться от жесткой привязки к классам, и, как следствие, вязкости кода.
Существует множество реализаций данного паттерна, я приведу три основных:
[php]
<?php
// Method 1.
class ClassA
{
public function __construct(ClassA $Prototype = null)
{
if (null !== $Prototype)
{
//do something
}
}
}
$Prototype = new ClassA();
$NewObject = new ClassA($Prototype);
// Method 2
class ClassB
{
/**
* This function return new object
*
* @return ClassB
*/
public function getClone()
{
$object = new ClassB();
//do something with object
return $object;
}
}
$Prototype = new ClassB();
$NewObject = $Prototype -> getClone();
// Method 3
class ClassC
{
public function __clone()
{
//do something
}
}
$Prototype = new ClassC();
$NewObject = clone $Prototype;
[/php]
В первом методе в конструктор поступает объект прототип, из которого мы получаем всю необходимую информацию. Недостаток такого метода в том, что мы все равно имеем жесткую привязку к классу. В таком случае паттерн прототип обычно используют совместно с фабричным методом.
Во втором методе объект прототип порождает новый объект и сам заполняет его. Может быть использован совместно с первым методом, тогда происходит делегирование прав на передачу состоянию конструктору нового объекта.
Третий метод схож со вторым, за исключением того, что порождение нового объекта происходит встроенными средствами php. Этот метод наиболее предпочтителен, на нем и остановимся

Суть паттерна

Применимость

  • инстанцируемые классы объявляются во время динамической загрузки (например из базы данных или XML)
  • если экземпляры класса могут находиться в одном из небольшого числа начальных состояний, а создавать новые объекты приходится на их основе часто, то это позволяет уменьшить количество написанного кода
  • В определенной архитектуре введение прототипов позволяет уменьшить количество абстрактных фабрик, создаваемых параллельно иерархии классов
Материал взят с источника

Добавить комментарий