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

PHP设计模式之组合模式定义与应用示例

发布:smiling 来源: PHP粉丝网  添加日期:2022-02-09 12:01:57 浏览: 评论:0 

这篇文章主要介绍了PHP设计模式之组合模式定义与应用,结合实例形式详细分析了PHP组合模式基本原理、定义与使用方法,需要的朋友可以参考下。

本文实例讲述了PHP设计模式之组合模式定义与应用,分享给大家供大家参考,具体如下:

  1. <?php 
  2. /** 
  3.  * 组合模式 
  4.  * 
  5.  * 将对象组合成树形结构以表示"部分-整体"的层次结构,使得客户对单个对象和复合对象的使用具有一致性 
  6.  */ 
  7. abstract class MenuComponent 
  8. { 
  9.   public function add($component) 
  10.   { 
  11.   } 
  12.   public function remove($component) 
  13.   { 
  14.   } 
  15.   public function getName() 
  16.   { 
  17.   } 
  18.   public function getUrl() 
  19.   { 
  20.   } 
  21.   public function display() 
  22.   { 
  23.   } 
  24. } 
  25. class Menu extends MenuComponent 
  26. { 
  27.   private $_items = array(); 
  28.   private $_name = null; 
  29.   public function __construct($name) 
  30.   { 
  31.     $this->_name = $name; 
  32.   } 
  33.   public function add($component) 
  34.   { 
  35.     $this->_items[] = $component; 
  36.   } 
  37.   public function remove($component) 
  38.   { 
  39.     $key = array_search($component, $this->_items); 
  40.     if ($key !== false) unset($this->_items[$key]); 
  41.   } 
  42.   public function display() 
  43.   { 
  44.     echo "-- " . $this->_name . " --------- \r\n "; 
  45.     foreach ($this->_items as $item) { 
  46.       $item->display(); 
  47.     } 
  48.   } 
  49. } 
  50. class Item extends MenuComponent 
  51. { 
  52.   private $_name = null; 
  53.   private $_url = null; 
  54.   public function __construct($name, $url) 
  55.   { 
  56.     $this->_name = $name; 
  57.     $this->_url = $url; 
  58.   } 
  59.   public function display() 
  60.   { 
  61.     echo $this->_name . "#" . $this->_url . " \r\n "; 
  62.   } 
  63. } 
  64. class Client 
  65. { 
  66.   private $_menu = null; 
  67.   public function __construct($menu) 
  68.   { 
  69.     $this->_menu = $menu; 
  70.   } 
  71.   public function setMenu($menu) 
  72.   { 
  73.     $this->_menu = $menu; 
  74.   } 
  75.   public function displayMenu() 
  76.   { 
  77.     $this->_menu->display(); 
  78.   } 
  79. } 
  80. // 实例一下 
  81. // 人 
  82. $item3 = new Item("baidu", "www.baidu.com"); 
  83. $item4 = new Item("google", "www.google.com"); 
  84. $item1 = new Item("163", "www.163.com"); 
  85. $item2 = new Item("sina", "www.sina.com"); 
  86. // 班级 
  87. $subMenu1 = new Menu("sub menu1"); 
  88. $subMenu1->add($item1); 
  89. $subMenu1->add($item2); 
  90. $subMenu2 = new Menu("sub menu2"); 
  91. $subMenu2->add($item3); 
  92. $subMenu2->add($item4); 
  93. $subMenu3 = new Menu("sub menu3"); 
  94. $subMenu3->add($item3); 
  95. $subMenu3->add($item4); 
  96. // 所有班级 
  97. $allMenu = new Menu("All Menu"); 
  98. $allMenu->add($subMenu1); 
  99. $allMenu->add($subMenu2); 
  100. $allMenu->add($subMenu3); 
  101. // 打印所有班级 
  102. $objClient = new Client($allMenu); 
  103. $objClient->displayMenu(); 
  104. // 打印第2 班级 
  105. $objClient->setMenu($subMenu2); 
  106. $objClient->displayMenu(); 
  107. ?> 

运行结果:

  1. -- All Menu --------- 
  2.  -- sub menu1 --------- 
  3.  163#www.163.com  
  4.  sina#www.sina.com 
  5.  -- sub menu2 --------- 
  6.  baidu#www.baidu.com 
  7.  google#www.google.com 
  8.  -- sub menu3 --------- 
  9.  baidu#www.baidu.com 
  10.  google#www.google.com 
  11.  -- sub menu2 --------- 
  12.  baidu#www.baidu.com 
  13.  google#www.google.com

Tags: PHP组合模式

分享到: