原型模式和其它的模式相對(duì)有一些不同之處了,這個(gè)也是當(dāng)然了所有的設(shè)計(jì)模式中的各種模式都有自己的特色了,下面一起來看看。
原型模式其實(shí)和工廠模式比較類似,都是用來創(chuàng)建對(duì)象的,只不過與工廠模式的實(shí)現(xiàn)不同。原型模式是先創(chuàng)建好一個(gè)原型對(duì)象,然后通過clone原型對(duì)象來創(chuàng)建新的對(duì)象。這樣就免去了類創(chuàng)建時(shí)重復(fù)的初始化操作了。原型模式適用于大對(duì)象的創(chuàng)建,因?yàn)樵趧?chuàng)建一個(gè)大對(duì)象時(shí),需要很大的開銷。如果每次都去new就會(huì)消耗很大,原型模式僅需從內(nèi)存拷貝既可。
還是繼續(xù)通過實(shí)例來向大家演示一下:
- <?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() {
- /*
- * 深拷貝實(shí)現(xiàn)
- */
- /*$serialize_obj = serialize($this); // 序列化
- $clone_obj = unserialize($serialize_obj); // 反序列化
- return $clone_obj;*/
- return clone $this; // 淺拷貝
- }
- }
- /**
- * 測(cè)試深拷貝用的引用類
- */
- 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 />'; //Vevb.com
- //測(cè)試深拷貝
- $demo->arr = array(3, 4);
- var_dump($concrete->get_data());
- echo '<br />';
- var_dump($object1->get_data());
- echo '<br />';
- ?>
新聞熱點(diǎn)
疑難解答