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.MVC的模板标签系统(二)
Sep 05 PHP
完美解决:Apache启动问题―(OS 10022)提供了一个无效的参数
Jun 08 PHP
ThinkPHP模板判断输出Defined标签用法详解
Jun 30 PHP
Linux下手动编译安装PHP扩展的例子分享
Jul 15 PHP
php switch语句多个值匹配同一代码块应用示例
Jul 29 PHP
php使用curl简单抓取远程url的方法
Mar 13 PHP
PHP CURL 多线程操作代码实例
May 13 PHP
递归实现php数组转xml的代码分享
May 14 PHP
CodeIgniter钩子用法实例详解
Jan 20 PHP
PHP中时间加减函数strtotime用法分析
Apr 26 PHP
PHP那些琐碎的知识点(整理)
May 20 PHP
PHP5.0 TIDY_PARSE_FILE缓冲区溢出漏洞的解决方案
Oct 14 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效率,提高php性能的一些方法
2011/03/24 PHP
解析如何通过PHP函数获取当前运行的环境 来进行判断执行逻辑(小技巧)
2013/06/25 PHP
Mac下关于PHP环境和扩展的安装详解
2019/10/17 PHP
PHP生成图表pChart的示例解析
2020/07/31 PHP
实现51Map地图接口(示例代码)
2013/11/22 Javascript
JS取文本框中最小值的简单实例
2013/11/29 Javascript
Bootstrap每天必学之js插件
2015/11/30 Javascript
JS简单获取当前年月日星期的方法示例
2017/02/07 Javascript
jQuery使用ajax_动力节点Java学院整理
2017/07/05 jQuery
Angularjs实现上传图片预览功能
2017/09/01 Javascript
vue-router中的hash和history两种模式的区别
2018/07/17 Javascript
JS简单判断是否在微信浏览器打开的方法示例
2019/01/08 Javascript
vue-cli基础配置及webpack配置修改的完整步骤
2019/10/20 Javascript
Javascript 类型转换、封闭函数及常见内置对象操作示例
2019/11/15 Javascript
vue实现鼠标移过出现下拉二级菜单功能
2019/12/12 Javascript
ElementUI Tree 树形控件的使用并给节点添加图标
2020/02/27 Javascript
[32:07]完美世界DOTA2联赛PWL S3 LBZS vs Rebirth 第一场 12.16
2020/12/17 DOTA
Python 匹配任意字符(包括换行符)的正则表达式写法
2009/10/29 Python
python中getattr函数使用方法 getattr实现工厂模式
2014/01/20 Python
python的dataframe和matrix的互换方法
2018/04/11 Python
python向已存在的excel中新增表,不覆盖原数据的实例
2018/05/02 Python
matplotlib subplots 调整子图间矩的实例
2018/05/25 Python
Python装饰器简单用法实例小结
2018/12/03 Python
python随机模块random使用方法详解
2020/02/14 Python
django实现后台显示媒体文件
2020/04/07 Python
python全栈开发语法总结
2020/11/22 Python
css3圆角样式分享自定义按钮样式
2013/12/27 HTML / CSS
html5实现图片转圈的动画效果——让页面动起来
2017/10/16 HTML / CSS
video下autoplay属性无效的解决方法(添加muted属性)
2020/05/19 HTML / CSS
Christys’ Hats官网:英国帽子制造商
2018/11/28 全球购物
世界上最大的字体市场:MyFonts
2020/01/10 全球购物
IMPORT的选项IGNORE有什么作用?缺省是什么设置?
2015/09/17 面试题
毕业生怎样写好自荐信
2013/11/11 职场文书
英语系本科生求职信范文
2013/12/18 职场文书
观看建国大业观后感
2015/06/01 职场文书
2016年学校“6﹒26国际禁毒日”宣传活动总结
2016/04/05 职场文书