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