网站地图    收藏   

主页 > php专栏 > php面向对象 >

php Prototype原型模式学习笔记 - php面向对象

来源:自学PHP网    时间:2014-11-30 12:29 作者: 阅读:次

[导读] 需要一个原型管理类,实现增加和获取克隆原型的方法,注意这里由于为了简明,省略了一些东西,实际上我们可以在克隆方法上做一些改动,也可以用接口规范每个原型类...

php Prototype原型模式学习笔记

我们一般用new来新增对象,不过很多时候新增一个对象需要一些工作,而星际里面往往会新增某些类的大量的对象,比如新增很多机枪兵和龙骑.

待解决的问题:我们能否减少new的使用,同时避免需要新增对象的时候,了解对象的类名.

思路:php5提供了克隆方法,我们可以新增一个对象,然后每次需要新增和她同类的对象,克隆他就可以了.

原型(Prototype)模式示例,代码如下:

  1. <?php 
  2.  
  3. //机兵类 
  4.  
  5. class Marine 
  6.  
  7. { 
  8.  
  9.   //所属的用户ID 
  10.  
  11.   public $playerID 
  12.  
  13.   //构造函数,参数为用户的id 
  14.  
  15.   public function __construct($id) 
  16.  
  17.   { 
  18.  
  19.   $this->playerID = $id; 
  20.  
  21.   } 
  22.  
  23. } 
  24.  
  25. //兵种的管理类 
  26.  
  27. class TroopManager 
  28.  
  29. { 
  30.  
  31.   //数组,用于存放多个兵种的原型 
  32.  
  33.   public $troopPrototype = array(); 
  34.  
  35.   //增加原型,第一个参数为原型的名字,第二个参数为原型对象 
  36.  
  37.   public function addPrototype($name, $prototype) 
  38.  
  39.   { 
  40.  
  41.     $this->troopPrototype[$name] = $prototype; 
  42.  
  43.   } 
  44.  
  45.   //获取原型的克隆,也就是替代new的方法,参数为原型的名字 
  46.  
  47.   public function getPrototype($name) 
  48.  
  49.   { 
  50.  
  51.     return clone $this->troopPrototype[$name]; 
  52.  
  53.   } 
  54.  
  55. } 
  56.  
  57. //初始化兵种的管理类 
  58.  
  59. $manager = new TroopManager(); 
  60.  
  61. //初始化两个属于不同玩家的机兵的原型 
  62.  
  63. $m1 = new Marine(1); 
  64.  
  65. $m2 = new Marine(2); 
  66.  
  67. //增加原型,同时用比较容易记忆的名字来命名原型 
  68.  
  69. $manager->addPrototype('Marine of 1', $m1); 
  70.  
  71. $manager->addPrototype('Marine of 2', $m2); 
  72.  
  73. //当需要新增对象的时候,我们可以不必知道对象的类名和初始化的工作 
  74.  
  75. $m3 = $manager->getPrototype('Marine of 1'); 
  76.  
  77. ?> 

用途总结:原型模式可以将新增对象的工作细节封装.

实现总结:需要一个原型管理类,实现增加和获取克隆原型的方法,注意这里由于为了简明,省略了一些东西,实际上我们可以在克隆方法上做一些改动,也可以用接口规范每个原型类.

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论