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里的JS打印函数
Oct 09 PHP
在Zeus Web Server中安装PHP语言支持
Oct 09 PHP
PHP json格式和js json格式 js跨域调用实现代码
Sep 08 PHP
关于Iframe如何跨域访问Cookie和Session的解决方法
Apr 15 PHP
利用phpExcel实现Excel数据的导入导出(全步骤详细解析)
Nov 26 PHP
PHP图像处理类库及演示分享
May 17 PHP
详解php设置session(过期、失效、有效期)
Nov 12 PHP
php简单统计在线人数的方法
May 10 PHP
深入理解php printf() 输出格式化的字符串
May 23 PHP
php微信公众平台开发(一) 配置接口
Dec 06 PHP
PHP面向对象类型约束用法分析
Jun 12 PHP
Yii2.0框架behaviors方法使用实例分析
Sep 30 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表单验证的3个函数ISSET()、empty()、is_numeric()的使用方法
2011/08/22 PHP
ThinkPHP3.2.2的插件控制器功能
2015/03/05 PHP
php仿微信红包分配算法的实现方法
2016/05/13 PHP
tp5(thinkPHP5框架)使用DB实现批量删除功能示例
2019/05/28 PHP
再次更新!MSClass (Class Of Marquee Scroll通用不间断滚动JS封装类 Ver 1.6)
2007/02/05 Javascript
推荐dojo学习笔记
2007/03/24 Javascript
jquery.Jwin.js 基于jquery的弹出层插件代码
2012/05/23 Javascript
javascript 回调函数详解
2014/11/11 Javascript
Javascript将数字转化成为货币格式字符串
2016/06/22 Javascript
jQuery+css实现非常漂亮的水平导航菜单效果
2016/07/27 Javascript
jquery实现界面无刷新加载登陆注册
2016/07/30 Javascript
Omi v1.0.2发布正式支持传递javascript表达式
2017/03/21 Javascript
vue引用js文件的多种方式(推荐)
2018/05/17 Javascript
vue input实现点击按钮文字增删功能示例
2019/01/29 Javascript
js实现金山打字通小游戏
2020/07/24 Javascript
vue监听键盘事件的相关总结
2021/01/29 Vue.js
Python中一些自然语言工具的使用的入门教程
2015/04/13 Python
Python中的下划线详解
2015/06/24 Python
Python面向对象编程中关于类和方法的学习笔记
2016/06/30 Python
python3爬取数据至mysql的方法
2018/06/26 Python
python实现倒计时小工具
2019/07/29 Python
django和vue实现数据交互的方法
2019/08/21 Python
python 如何读、写、解析CSV文件
2021/03/03 Python
X/HTML5 和 XHTML2
2008/10/17 HTML / CSS
澳大利亚领先的女帽及配饰公司:Morgan&Taylor
2019/12/01 全球购物
adidas瑞典官方网站:购买阿迪达斯鞋子和运动服
2019/12/11 全球购物
Theflamel意大利:女士奢华服装、鞋子和配件
2020/01/11 全球购物
小饰品店的创业计划书范文
2013/12/28 职场文书
2014年应届大学生自我评价
2014/01/09 职场文书
开办大学饮食联盟创业计划书
2014/01/29 职场文书
后勤服务中心总经理工作职责
2014/03/03 职场文书
医德医风自我评价
2014/09/19 职场文书
2014年政府采购工作总结
2014/12/09 职场文书
师德标兵先进事迹材料
2014/12/19 职场文书
2015年党日活动总结范文
2015/03/25 职场文书
html+css实现赛博朋克风格按钮
2021/05/26 HTML / CSS