萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> php編程 >> PHP設計模式之:原型模式學習筆記

PHP設計模式之:原型模式學習筆記

原型模式和其它的模式相對有一些不同之處了,這個也是當然了所有的設計模式中的各種模式都有自己的特色了,下面一起來看看。


原型模式其實和工廠模式比較類似,都是用來創建對象的,只不過與工廠模式的實現不同。原型模式是先創建好一個原型對象,然後通過clone原型對象來創建新的對象。這樣就免去了類創建時重復的初始化操作了。原型模式適用於大對象的創建,因為在創建一個大對象時,需要很大的開銷。如果每次都去new就會消耗很大,原型模式僅需從內存拷貝既可。

還是繼續通過實例來向大家演示一下

<?php
/**
 * 抽象原型角色
 */
interface Prototype {
    public function clone_obj();
}
/**
 * 具體原型角色
 */
class Concrete implements Prototype{
 
    private $data;
 
    public function __construct($data) {
        $this->data = $data;
    }
    public function get_data() {
        return $this->data;
    }
 
    public function clone_obj() {
        /*
         * 深拷貝實現
         */
        /*$serialize_obj = serialize($this); // 序列化
        $clone_obj = unserialize($serialize_obj); // 反序列化 
        return $clone_obj;*/
 
        return clone $this; // 淺拷貝
    }
}
/**
 * 測試深拷貝用的引用類
 */
class Demo {
    public $arr;
}
$demo = new Demo();
$demo->arr = array(1, 2);
$concrete = new Concrete($demo);
$object1 = $concrete->clone_obj();
var_dump($concrete->get_data());
echo '<br />';
var_dump($object1->get_data());
echo '<br />';
//測試深拷貝
$demo->arr = array(3, 4);
var_dump($concrete->get_data());
echo '<br />';
var_dump($object1->get_data());
echo '<br />';
?>

更多的詳細說明和實例

copyright © 萬盛學電腦網 all rights reserved