PHP设计模式---原型模式(Prototype Pattern)

定义

用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象,通过复制已经存在的实例来返回新的实例,而不是新建实例,并且原型是可以制定的原型模式多用于创建复杂的或耗时的实例,这种情况下,复制一个已经存在的实例是程序运行更高的一种好的办法。

备注

浅拷贝:Object类的clone方法只会拷贝对象中的基本的数据类型,对于数组、容器对象、引用对象等都不会拷贝,这就是浅拷贝。
如果一个对象A是对象B的部分(组成),拷贝的时候只是会复制一份对A对象的引用,并不会重新复制A对象
深拷贝:就是A对象也拷贝,完全的复制

使用情况

对象需要提供给其对象访问而且各调用者能都需要修改其值时考虑使用原型模式拷贝多对象供调用者使用

代码示例

<?php
abstract class Type
{
    private $id = null;
    public function __construct($id)
    {
        $this->id=$id;
    }

    public function getID()
    {
        return $this->id;
    }

    public function __clone()
    {
        $this->id+=1;   //进行克隆,并重新赋值
    }

    public function getClone() //执行克隆
    {
        return clone $this; //返回克隆后的值
    }
}

class Types extends Type
{
    //继承
}

$obj = new Types(0);

$obj1 = clone $obj;
echo $obj1->getID(); //1 

$obj2 = $obj;
echo $obj2->getID();  //0  

$obj3 = $obj->getClone();
echo $obj3->getID(); //1