原型模式

2017-07-12  本文已影响30人  零一间
<?php

/*
 * 原型模式
 * 先创建好一个原型对象,然后通过clone原型对象来创建新的对象。
 * 适用于大对象的创建,因为创建一个大对象需要很大的开销,
 * 如果每次new就会消耗很大,原型模式仅需内存拷贝即可。
 */

interface Prototype {
    function shallowCopy();

    function deepCopy();
}

class  ConcretePrototype implements Prototype {

    public $username;


    public function setUserName($userName) {
        $this->username = $userName;
    }

    public function getUserName() {
        return $this->username;
    }

    /**
     * 浅拷贝
     * @return ConcretePrototype
     */
    function shallowCopy() {
        return clone  $this;
    }

    /**
     * 深拷贝
     * @return mixed
     */
    function deepCopy(){
        $serialize_obj = serialize($this);
        $clone_obj = unserialize($serialize_obj);
        return $clone_obj;
    }

}

浅拷贝:

被拷贝对象的所有变量都含有与原对象相同的值,而且对其他对象的引用仍然是指向原来的对象,即浅拷贝只负责当前对象实例,对引用的对象不做拷贝。

深拷贝:
被拷贝对象的所有的变量都含有与原来对象相同的值,除了那些引用其他对象的变量,那些引用其他对象的变量将指向一个被拷贝的新对象,而不再是原来那些被引用的对象。即深拷贝把要拷贝的对象所引用的对象也拷贝了一次。而这种对被引用到的对象拷贝叫做间接拷贝。

可参考:http://www.2cto.com/kf/201110/109659.html

上一篇下一篇

猜你喜欢

热点阅读