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

首頁 > 開發 > PHP > 正文

什么是組合模式?(舉例說明)

2024-05-04 21:50:59
字體:
來源:轉載
供稿:網友

組合模式 (Composite Pattern)

組合模式:允許客戶將對象組合成樹形結構來表現"整體/部分”層次結構。組合能讓客戶以一致的方式處理個別對象以及對象組合。

組合模式讓我們能用樹形方式創建對象的結構,樹里面包含了組合以及個別的對象。使用組合結構,我們能把相同的操作應用在組合和個別對象上。換句話說,在大多數情況下,我們可以忽略對象組合和個別對象之間的差別。

包含其他組件的組件為組合對象;不包含其他組件的組件為葉節點對象。

組合模式為了保持”透明性“,常常會違反單一責任原則。也就是說,它一方面要管理內部對象,另一方面要提供一套訪問接口。

當組合模式接口里提供刪除子節點的方法時,在組件里有一個指向父節點的指針的話,實現刪除操作會比較容易。

以一個軍隊的戰斗力計算為例演示組合模式

軍隊由步兵、炮兵、特種兵組成,他們都具備一個能力就是戰斗并具備各自的戰斗力。我們通過他們組合成一個軍隊并完成戰斗力的計算。

  1. <?php 
  2.  
  3. //抽象士兵類 
  4.  
  5. interface soldier{ 
  6.  
  7. public function fire(); 
  8.  
  9.  
  10. //步兵 攻擊力5 
  11.  
  12. class bubing implements soldier{ 
  13.  
  14. public function fire(){ 
  15.  
  16. return 5; 
  17.  
  18.  
  19.  
  20. //炮兵 攻擊力8 
  21.  
  22. class paobing implements soldier{ 
  23.  
  24. public function fire(){ 
  25.  
  26. return 8; 
  27.  
  28.  
  29.  
  30. //特種兵 攻擊力 12 
  31.  
  32. class tezhongbing implements soldier{ 
  33.  
  34. public function fire(){ 
  35.  
  36. return 12; 
  37.  
  38.  
  39.  
  40. //軍隊類實現兵種的組合 
  41.  
  42. class arm{ 
  43.  
  44. //存儲作戰兵種的數組  
  45.  
  46. private $soldier = array(); 
  47.  
  48. //添加作戰兵種 
  49.  
  50. public function add($soldierType){ 
  51.  
  52. //獲取對應的兵種對象 
  53.  
  54. $soldier  = new $soldierType(); 
  55.  
  56. //保存進數組利用數組的鍵記錄兵種 便于刪除 
  57.  
  58. $this->soldier[$soldierType] = $soldier
  59.  
  60.  
  61. //刪除兵種 
  62.  
  63. public function delete($soldierType){ 
  64.  
  65. if(isset($this->soldier[$soldierType])){ 
  66.  
  67. unset($this->soldier[$soldierType]); 
  68.  
  69.  
  70.  
  71. //計算并輸出戰斗能力 
  72.  
  73. public function show(){ 
  74.  
  75. $zhantouli = 0; 
  76.  
  77. foreach($this->soldier as $v){ 
  78.  
  79. $zhantouli += $v->fire(); 
  80.  
  81.  
  82. echo "軍隊的戰斗力: ".$zhantouli
  83.  
  84.  
  85.  
  86. $arm = new arm(); 
  87.  
  88. $arm->add('bubing'); 
  89.  
  90. $arm->add('paobing'); 
  91.  
  92. $arm->show(); 
  93.  
  94. $arm->delete('paobing'); 
  95.  
  96. $arm->show(); 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 龙门县| 临江市| 阳信县| 定南县| 阳江市| 股票| 古蔺县| 池州市| 寿光市| 镇远县| 巍山| 石家庄市| 岳阳县| 江门市| 德庆县| 潮安县| 高邮市| 饶河县| 海淀区| 巴里| 武隆县| 阿瓦提县| 元阳县| 瑞金市| 镇安县| 江达县| 温泉县| 肥东县| 南丹县| 乌兰县| 乌拉特后旗| 吐鲁番市| 滕州市| 鄄城县| 原阳县| 鄄城县| 黔西| 常宁市| 屯留县| 巫山县| 杭州市|