1. 其实就是克隆,将一个实例化后的对象,克隆下来,就可以得到一个实例化后的对象,不需要走构造函数等一些列的操作<br />用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象<br />创建一个大对象需要很大的开销,每次new 都会消耗很大,原型模式仅仅需要内存拷贝就可<br />拷贝分为浅拷贝跟深拷贝<br />浅拷贝:直接拷贝一份,原型内的实例化对象指向的内存空间跟,拷贝后的对象指向空间一致,一旦对象改变,原型也会改变<br />深拷贝:拷贝之后,实例化对象内的指向空间不一致,个改个的
    <?php
    
    /**
     * 抽象类
     */
    abstract class Prototype
    {
        public function __construct()
        {
            echo '初始化' . PHP_EOL;
        }
    
        abstract public function __clone();
    }
    
    /**
     * 引用类
     */
    class name
    {
        public $free = '我是第一次呢';
    }
    
    /**
     * 抽象实例化类原型
     */
    class Concreate1 extends Prototype
    {
        public $v;
    
        public function name()
        {
            $name = new name();
            $this->v = $name;
        }
    
        public function __clone()
        {
            //深克隆方法1 重现实例化
    //        $name = new name();
    //        $this->v = $name;
        }
    }
    
    $Concreate1 = new Concreate1;
    $Concreate1->name();
    //拷贝
    $Concreate2 = clone $Concreate1;
    
    //深克隆方法2  序列化,反序列化
    //$Concreate2 = serialize($Concreate2);
    //$Concreate2 = unserialize($Concreate2);
    
    echo $Concreate1->v->free . PHP_EOL;
    echo $Concreate2->v->free . PHP_EOL;
    $Concreate2->v->free = '看什么看';
    echo $Concreate1->v->free . PHP_EOL;
    echo $Concreate2->v->free . PHP_EOL;
    
    //-----------浅拷贝
    //初始化
    //我是第一次呢
    //我是第一次呢
    //我是第一次呢
    //看什么看
    
    //-----------深拷贝
    //初始化
    //我是第一次呢
    //我是第一次呢
    //看什么看
    //看什么看