php设计模式 Composite (组合模式)

简介:这是php设计模式 Composite (组合模式)的详细页面,介绍了和php,有关的知识、技巧、经验,和一些php源码等。

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

爱J2EE关注Java迈克尔杰克逊视频站JSON在线工具

http://biancheng.dnbcw.info/php/339018.html pageNo:8

posted on 2011-11-12 09:14  圣者  阅读(126)  评论(0编辑  收藏  举报

导航