国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

php Prototype原型模式學(xué)習(xí)筆記

2024-09-04 11:43:40
字體:
供稿:網(wǎng)友

我們一般用new來新增對(duì)象,不過很多時(shí)候新增一個(gè)對(duì)象需要一些工作,而星際里面往往會(huì)新增某些類的大量的對(duì)象,比如新增很多機(jī)槍兵和龍騎.

待解決的問題:我們能否減少new的使用,同時(shí)避免需要新增對(duì)象的時(shí)候,了解對(duì)象的類名.

思路:php5提供了克隆方法,我們可以新增一個(gè)對(duì)象,然后每次需要新增和她同類的對(duì)象,克隆他就可以了.

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

  1. <?php 
  2.  
  3. //機(jī)兵類 
  4.  
  5. class Marine 
  6.  
  7.  
  8.   //所屬的用戶ID 
  9.  
  10.   public $playerID 
  11.  
  12.   //構(gòu)造函數(shù),參數(shù)為用戶的id 
  13.  
  14.   public function __construct($id
  15.  
  16.   { 
  17.  
  18.   $this->playerID = $id
  19.  
  20.   } 
  21.  
  22.  
  23. //兵種的管理類 
  24.  
  25. class TroopManager 
  26.  
  27.  
  28.   //數(shù)組,用于存放多個(gè)兵種的原型 
  29.  
  30.   public $troopPrototype = array(); 
  31.  
  32.   //增加原型,第一個(gè)參數(shù)為原型的名字,第二個(gè)參數(shù)為原型對(duì)象 
  33.  
  34.   public function addPrototype($name$prototype
  35.  
  36.   { 
  37.  
  38.     $this->troopPrototype[$name] = $prototype
  39.  
  40.   } 
  41.  
  42.   //獲取原型的克隆,也就是替代new的方法,參數(shù)為原型的名字 
  43.  
  44.   public function getPrototype($name
  45.  
  46.   { 
  47.  
  48.     return clone $this->troopPrototype[$name]; 
  49.  
  50.   } 
  51.  
  52.  
  53. //初始化兵種的管理類 
  54.  
  55. $manager = new TroopManager(); 
  56.  
  57. //初始化兩個(gè)屬于不同玩家的機(jī)兵的原型 
  58.  
  59. $m1 = new Marine(1); 
  60.  
  61. $m2 = new Marine(2); 
  62.  
  63. //增加原型,同時(shí)用比較容易記憶的名字來命名原型 
  64.  
  65. $manager->addPrototype('Marine of 1'$m1); 
  66.  
  67. $manager->addPrototype('Marine of 2'$m2); 
  68.  
  69. //當(dāng)需要新增對(duì)象的時(shí)候,我們可以不必知道對(duì)象的類名和初始化的工作 
  70.  
  71. $m3 = $manager->getPrototype('Marine of 1'); 
  72.  
  73. ?> 

用途總結(jié):原型模式可以將新增對(duì)象的工作細(xì)節(jié)封裝.

實(shí)現(xiàn)總結(jié):需要一個(gè)原型管理類,實(shí)現(xiàn)增加和獲取克隆原型的方法,注意這里由于為了簡明,省略了一些東西,實(shí)際上我們可以在克隆方法上做一些改動(dòng),也可以用接口規(guī)范每個(gè)原型類.

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 柳州市| 东兴市| 景谷| 信宜市| 库尔勒市| 弥渡县| 扎赉特旗| 花莲县| 睢宁县| 定结县| 林西县| 杨浦区| 湘乡市| 彭山县| 微山县| 博乐市| 吉水县| 蒲城县| 郎溪县| 稷山县| 芒康县| 青浦区| 沂水县| 曲沃县| 南城县| 衡南县| 千阳县| 思南县| 大理市| 达尔| 靖远县| 梅河口市| 牡丹江市| 赤峰市| 奉节县| 南汇区| 龙海市| 拉萨市| 平舆县| 肃南| 丹棱县|