首页 PHP 正文
259

设计模式之原型模式

原型模式就是利用现有的对象实例复制出另一个实例。在某些情况下,可能需要同类型的很多对象,比如要在天空随机画出很多个星星,那么此时可以先实例化一个星星对象,然后利用这个实例复制出N个实例,再随机摆放它们各自的位置就行了。这样做的好处就是简化了实例化的步骤,避免多次使用new,提升了性能。
有一点要注意是对象的浅复制和深复制的区别。
interface Prototype{
    public function cloneMe();
}

class Object1 implements Prototype{
    private $obj;
    private $num=1;
    
    public function cloneMe(){
        return clone $this; 
    }
    
    /**
    *__clone方法是在对象被成功复制后调用的,并且调用的是新对象的clone方法,而不是原对象。
    */
    public function __clone(){
        $this->obj && ($this->obj = clone $this->obj); //实现深度复制。
    }
    
    public function setNumber($num){
        $this->num = $num;
    }
    
    public function setObj($obj){
        $this->obj = $obj;
    }
    
    public function show(){
        echo 'This is Object'.$this->num.'<br>';
    }
}

$object1 = new Object1();
$copyObject1 = $object1->cloneMe();
$copyObject1->setNumber(2);
$object1->show();
$copyObject1->show();

正在加载评论...