美文网首页
原型模式

原型模式

作者: 零一间 | 来源:发表于2017-07-12 13:20 被阅读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

    相关文章

      网友评论

          本文标题:原型模式

          本文链接:https://www.haomeiwen.com/subject/arlbhxtx.html