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