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


Posted in PHP onJune 26, 2011
<?php 
 /** 
 * 组合模式 
 * 
 * 将对象组合成树形结构以表示"部分-整体"的层次结构,使得客户对单个对象和复合对象的使用具有一致性 
 */ 
 abstract class MenuComponent 
 { 
 public function add($component){} 
public function remove($component){} 
public function getName(){} 
public function getUrl(){} 
public function display(){} 
} 
class Menu extends MenuComponent 
{ 
private $_items = array(); 
private $_name = null; 
public function __construct($name) 
{ 
$this->_name = $name; 
} 
public function add($component) 
{ 
$this->_items[] = $component; 
} 
public function remove($component) 
{ 
$key = array_search($component,$this->_items); 
if($key !== false) unset($this->_items[$key]); 
} 
public function display() 
{ 
echo "-- ".$this->_name." ---------<br/>"; 
foreach($this->_items as $item) 
{ 
$item->display(); 
} 
} 
} 
class Item extends MenuComponent 
{ 
private $_name = null; 
private $_url = null; 
public function __construct($name,$url) 
{ 
$this->_name = $name; 
$this->_url = $url; 
} 
public function display() 
{ 
echo $this->_name."#".$this->_url."<br/>"; 
} 
} 
class Client 
{ 
private $_menu = null; 
public function __construct($menu) 
{ 
$this->_menu = $menu; 
} 
public function setMenu($menu) 
{ 
$this->_menu = $menu; 
} 
public function displayMenu() 
{ 
$this->_menu->display(); 
} 
} 
// 实例一下 
// 创建menu 
$subMenu1 = new Menu("sub menu1"); 
$subMenu2 = new Menu("sub menu2"); 
$subMenu3 = new Menu("sub menu3"); 
$item1 = new Item("163","www.163.com"); 
$item2 = new Item("sina","www.sina.com"); 
$subMenu1->add($item1); 
$subMenu1->add($item2); 
$item3 = new Item("baidu","www.baidu.com"); 
$item4 = new Item("google","www.google.com"); 
$subMenu2->add($item3); 
$subMenu2->add($item4); 
$allMenu = new Menu("All Menu"); 
$allMenu->add($subMenu1); 
$allMenu->add($subMenu2); 
$allMenu->add($subMenu3); 
$objClient = new Client($allMenu); 
$objClient->displayMenu(); 
$objClient->setMenu($subMenu2); 
$objClient->displayMenu();
PHP 相关文章推荐
让PHP支持页面回退的两种方法[转]
Feb 14 PHP
PHP下常用正则表达式整理
Oct 26 PHP
thinkPHP的Html模板标签使用方法
Nov 13 PHP
浅析php header 跳转
Jun 17 PHP
Apache实现Web Server负载均衡详解(不考虑Session版)
Jul 05 PHP
PHP字符串中特殊符号的过滤方法介绍
Feb 18 PHP
一个不易被发现的PHP后门代码解析
Jul 05 PHP
腾讯微博提示missing parameter errorcode 102 错误的解决方法
Dec 22 PHP
php结合mysql与mysqli扩展处理事务的方法
Jun 29 PHP
postfixadmin忘记密码后的修改密码方法详解
Jul 20 PHP
浅谈php和js中json的编码和解码
Oct 24 PHP
Win7环境下Apache连接MySQL提示连接已重置的解决办法
May 09 PHP
php设计模式 State (状态模式)
Jun 26 #PHP
php设计模式 Bridge (桥接模式)
Jun 26 #PHP
php设计模式 Chain Of Responsibility (职责链模式)
Jun 26 #PHP
php设计模式 FlyWeight (享元模式)
Jun 26 #PHP
php设计模式 Mediator (中介者模式)
Jun 26 #PHP
php设计模式 Prototype (原型模式)代码
Jun 26 #PHP
PHP如何解决网站大流量与高并发的问题
Jun 25 #PHP
You might like
php 变量定义方法
2009/06/14 PHP
php更改目录及子目录下所有的文件后缀的代码
2010/09/24 PHP
浅析linux下apache服务器的配置和管理
2013/08/10 PHP
Laravel 创建可以传递参数 Console服务的例子
2019/10/14 PHP
jQuery ready函数滥用分析
2011/02/16 Javascript
动态创建样式表在各浏览器中的差异测试代码
2011/09/13 Javascript
formvalidator验证插件中有关ajax验证问题
2013/01/04 Javascript
jQuery建立一个按字母顺序排列的友好页面索引(兼容IE6/7/8)
2013/02/26 Javascript
JavaScript改变HTML元素的样式改变CSS及元素属性
2013/11/12 Javascript
B/S模式项目中常用的javascript汇总
2013/12/17 Javascript
浅谈 javascript 事件处理
2015/01/04 Javascript
Javascript之Math对象详解
2016/06/07 Javascript
不使用script导入js文件的几种方法
2016/10/27 Javascript
JavaScript数据结构中串的表示与应用实例
2017/04/12 Javascript
微信小程序云开发如何实现数据库自动备份实现
2019/08/16 Javascript
swiper自定义分页器的样式
2020/09/14 Javascript
解决vue scoped html样式无效的问题
2020/10/24 Javascript
从零学python系列之教你如何根据图片生成字符画
2014/05/23 Python
Python解决鸡兔同笼问题的方法
2014/12/20 Python
python实现在windows下操作word的方法
2015/04/28 Python
微信跳一跳小游戏python脚本
2018/01/05 Python
python如何重载模块实例解析
2018/01/25 Python
python直接获取API传递回来的参数方法
2018/12/17 Python
python3的print()函数的用法图文讲解
2019/07/16 Python
基于python实现自动化办公学习笔记(CSV、word、Excel、PPT)
2019/08/06 Python
基于python 等频分箱qcut问题的解决
2020/03/03 Python
python 错误处理 assert详解
2020/04/20 Python
python tkinter实现连连看游戏
2020/11/16 Python
python数据抓取3种方法总结
2021/02/07 Python
HTML5制作酷炫音频播放器插件图文教程
2014/12/30 HTML / CSS
意大利在线大学图书馆:Libreria universitaria
2019/07/16 全球购物
汽车运用工程专业毕业生推荐信
2013/12/25 职场文书
2014年接待工作总结
2014/11/26 职场文书
2015年艾滋病宣传活动总结
2015/03/27 职场文书
JavaScript 与 TypeScript之间的联系
2021/11/27 Javascript
如何解决goland,idea全局搜索快捷键失效问题
2022/04/03 Golang