原型模式

不使用类,而使用具体的实例来生成另一个实例。

各大语言都内置了 clone 特性,可以用于实现原型模式。

手动实现 clone

<?php
 
class A
{
protected $name;
 
public function __construct($name)
{
$this->name = $name;
}
 
public function getName()
{
return $this->name;
}
 
public function setName($name)
{
$this->name = $name;
}
 
public function customClone()
{
return new A($this->name);
}
}
 
$a = new A('John');
$b = $a->customClone();
$b->setName('Doe');
 
echo $a->getName(); // John
echo $b->getName(); // Doe

php 中的 __clone 方法执行的是浅拷贝,对于引用类型的成员变量,拷贝的也只是引用。如果 clone 引用类型的成员变量,需要自己实现 __clone 方法。