当前位置:首页 > 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.   public function add($component
  9.   { 
  10.   } 
  11.   public function remove($component
  12.   { 
  13.   } 
  14.   public function getName() 
  15.   { 
  16.   } 
  17.   public function getUrl() 
  18.   { 
  19.   } 
  20.   public function display() 
  21.   { 
  22.   } 
  23. class Menu extends MenuComponent 
  24.   private $_items = array(); 
  25.   private $_name = null; 
  26.   public function __construct($name
  27.   { 
  28.     $this->_name = $name
  29.   } 
  30.   public function add($component
  31.   { 
  32.     $this->_items[] = $component
  33.   } 
  34.   public function remove($component
  35.   { 
  36.     $key = array_search($component$this->_items); 
  37.     if ($key !== false) unset($this->_items[$key]); 
  38.   } 
  39.   public function display() 
  40.   { 
  41.     echo "-- " . $this->_name . " --------- \r\n "
  42.     foreach ($this->_items as $item) { 
  43.       $item->display(); 
  44.     } 
  45.   } 
  46. class Item extends MenuComponent 
  47.   private $_name = null; 
  48.   private $_url = null; 
  49.   public function __construct($name$url
  50.   { 
  51.     $this->_name = $name
  52.     $this->_url = $url
  53.   } 
  54.   public function display() 
  55.   { 
  56.     echo $this->_name . "#" . $this->_url . " \r\n "
  57.   } 
  58. class Client 
  59.   private $_menu = null; 
  60.   public function __construct($menu
  61.   { 
  62.     $this->_menu = $menu
  63.   } 
  64.   public function setMenu($menu
  65.   { 
  66.     $this->_menu = $menu
  67.   } 
  68.   public function displayMenu() 
  69.   { 
  70.     $this->_menu->display(); 
  71.   } 
  72. // 实例一下 
  73. // 人 
  74. $item3 = new Item("baidu""www.baidu.com"); 
  75. $item4 = new Item("google""www.google.com"); 
  76. $item1 = new Item("163""www.163.com"); 
  77. $item2 = new Item("sina""www.sina.com"); 
  78. // 班级 
  79. $subMenu1 = new Menu("sub menu1"); 
  80. $subMenu1->add($item1); 
  81. $subMenu1->add($item2); 
  82. $subMenu2 = new Menu("sub menu2"); 
  83. $subMenu2->add($item3); 
  84. $subMenu2->add($item4); 
  85. $subMenu3 = new Menu("sub menu3"); 
  86. $subMenu3->add($item3); 
  87. $subMenu3->add($item4); 
  88. // 所有班级 
  89. $allMenu = new Menu("All Menu"); 
  90. $allMenu->add($subMenu1); 
  91. $allMenu->add($subMenu2); 
  92. $allMenu->add($subMenu3); 
  93. // 打印所有班级 
  94. $objClient = new Client($allMenu); 
  95. $objClient->displayMenu(); 
  96. // 打印第2 班级 
  97. $objClient->setMenu($subMenu2); 
  98. $objClient->displayMenu(); 
  99. ?> 

运行结果:

  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组合模式

分享到: