Siguiendo con el repaso a los patrones de diseño software, llegamos al llamado Prototype, o Prototipo en castellano. Este patrón consiste en crear un método en los objetos para que se puedan clonar fácilmente.
Es decir, una vez tenemos un objeto, podemos crear otro copia de este primero, pero puede ser muy costoso hacerlo desde afuera del objeto que queremos clonar. Lo mejor es hacerlo internamente dentro del propio objecto. Al grano..
Líneas generales sobre el funcionamiento de Prototype
Es sencillo, simplemente se construye implementado el siguiente esquema:
Siguiendo la línea de usar PHP en los ejemplos de esta serie, podríamos hacer algo como lo siguiente en una clase externa:
<?php
$object1 = new ObjectType1();
$clonedObject1 = $object1->clone();
La implementación de la interfaz que definiría este caso de uso podría ser:
<?php
interface IObjectPrototype
{
public function clone(): object;
}
..y las implementaciones de los objetos:
<?php
class ObjectType1
{
private $var1;
private $var2;
/**
* Some more code..
*/
public function clone(): ObjectType1
{
$new = new ObjectType1();
$new->var1 = $this->var1;
$new->var2 = $this->var2;
return $new;
}
}
<?php
class ObjectType2
{
private $var1;
private $var2;
/**
* Some more code..
*/
public function clone(): ObjectType2
{
$new = new ObjectType2();
$new->var1 = $this->var1;
$new->var2 = $this->var2;
return $new;
}
}