当前位置:首页 > PHP教程 > php高级应用 > 列表

PHP设计模式之:原型模式学习笔记

发布:smiling 来源: PHP粉丝网  添加日期:2016-07-27 13:30:43 浏览: 评论:0 

原型模式和其它的模式相对有一些不同之处了,这个也是当然了所有的设计模式中的各种模式都有自己的特色了,下面一起来看看。

原型模式其实和工厂模式比较类似,都是用来创建对象的,只不过与工厂模式的实现不同。原型模式是先创建好一个原型对象,然后通过clone原型对象来创建新的对象。这样就免去了类创建时重复的初始化操作了。原型模式适用于大对象的创建,因为在创建一个大对象时,需要很大的开销。如果每次都去new就会消耗很大,原型模式仅需从内存拷贝既可。

还是继续通过实例来向大家演示一下:

  1. <?php 
  2. /** 
  3.  * 抽象原型角色 
  4.  */ 
  5. interface Prototype { 
  6.     public function clone_obj(); 
  7. /** 
  8.  * 具体原型角色 
  9.  */ 
  10. class Concrete implements Prototype{ 
  11.   
  12.     private $data
  13.   
  14.     public function __construct($data) { 
  15.         $this->data = $data
  16.     } 
  17.     public function get_data() { 
  18.         return $this->data; 
  19.     } 
  20.   
  21.     public function clone_obj() { 
  22.         /* 
  23.          * 深拷贝实现 
  24.          */ 
  25.         /*$serialize_obj = serialize($this); // 序列化 
  26.         $clone_obj = unserialize($serialize_obj); // 反序列化 
  27.         return $clone_obj;*/ 
  28.   
  29.         return clone $this// 浅拷贝 
  30.     } 
  31. /** 
  32.  * 测试深拷贝用的引用类 
  33.  */ 
  34. class Demo { 
  35.     public $arr
  36. $demo = new Demo(); 
  37. $demo->arr = array(1, 2); 
  38. $concrete = new Concrete($demo); 
  39. $object1 = $concrete->clone_obj(); 
  40. var_dump($concrete->get_data()); 
  41. echo '<br />'
  42. var_dump($object1->get_data()); 
  43. echo '<br />';  //phpfensi.com 
  44. //测试深拷贝 
  45. $demo->arr = array(3, 4); 
  46. var_dump($concrete->get_data()); 
  47. echo '<br />'
  48. var_dump($object1->get_data()); 
  49. echo '<br />'
  50. ?> 

Tags: 设计模式 PHP原型 PHP模式

分享到: