国产探花免费观看_亚洲丰满少妇自慰呻吟_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(); 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 朝阳市| 太和县| 福州市| 通许县| 洛浦县| 东山县| 凉山| 民县| 公安县| 平乡县| 当涂县| 凤山县| 娄底市| 克拉玛依市| 河东区| 台南县| 城固县| 兴国县| 曲水县| 西安市| 乐安县| 札达县| 靖江市| 景谷| 东宁县| 江永县| 南皮县| 阜平县| 涪陵区| 佛教| 香河县| 都江堰市| 吴川市| 乌海市| 闵行区| 罗定市| 玉环县| 汝南县| 外汇| 贡嘎县| 峨眉山市|