原型模式其實和工廠模式比較類似,都是用來創建對象的,只不過與工廠模式的實現不同。原型模式是先創建好一個原型對象,然後通過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 />';
?>更多的詳細說明和實例