PHP设计模式—原型模式
原型模式:通过clone创建一个新的对象
(一)为什么使用原型模式:
初始化新的大对象时的很耗开销;原型模式可以直接clone对象从而创建一个新对象,免去初始化时的开销
(二)原型模式的UML图:
(三)原型模式的简单实例:
1.代码:
/**
* 原型类
*/
abstract class Prototype
{
protected $name;
protected $title;
public function __construct($name)
{
$this->name = $name;
}
public abstract function copy();
public function setTitle($title)
{
$this->title = $title;
}
}
/**
* 具体实现
*
*/
class ConcretePrototype extends Prototype
{
/**
* 创建当前对象的浅表副本。方法是创建一个新对象,然后将当前对象的
* 非静态字段复制到该新对象。如果字段是值类型的,则对该字段执行逐
* 位复制。如果字段是引用类型,则复制引用但不复制引用的对象:因此。
* 原始对象及其副本引用同一对象
*/
public function copy()
{
return clone $this;
}
}
$p1 = new ConcretePrototype("文件名");
$p2 = $p1->copy();
$p3 = $p1->copy();
$p1->setTitle("p1");
$p2->setTitle("p2");
$p3->setTitle("p3");
var_dump($p1);echo "<br/>";
var_dump($p2);echo "<br/>";
var_dump($p3);echo "<br/>";
2.运行结果
object(ConcretePrototype)[1]
protected 'name' => string '文件名' (length=9)
protected 'title' => string 'p1' (length=2)
object(ConcretePrototype)[2]
protected 'name' => string '文件名' (length=9)
protected 'title' => string 'p2' (length=2)
object(ConcretePrototype)[3]
protected 'name' => string '文件名' (length=9)
protected 'title' => string 'p3' (length=2)