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生成扇形比例图实例
Nov 06 PHP
PHP5中实现多态的两种方法实例分享
Apr 21 PHP
推荐一款MAC OS X 下php集成开发环境mamp
Nov 08 PHP
php读取文件内容的方法汇总
Jan 24 PHP
PHP实现懒加载的方法
Mar 07 PHP
PHP动态柱状图实现方法
Mar 30 PHP
CodeIgniter扩展核心类实例详解
Jan 20 PHP
ThinkPHP5实现作业管理系统中处理学生未交作业与已交作业信息的方法
Nov 12 PHP
PHP AjaxForm提交图片上传并显示图片源码
Nov 29 PHP
php5.3/5.4/5.5/5.6/7常见新增特性汇总整理
Feb 27 PHP
php的对象传值与引用传值代码实例讲解
Feb 26 PHP
浅谈PHP7中的一些小技巧
May 29 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
在JavaScript中调用php程序
2009/03/09 PHP
php获取数组中重复数据的两种方法
2013/06/28 PHP
php读取excel文件示例分享(更新修改excel)
2014/02/27 PHP
PC端微信扫码支付成功之后自动跳转php版代码
2017/07/07 PHP
php基于自定义函数记录log日志方法
2017/07/21 PHP
ThinkPHP 3使用OSS的方法
2018/07/19 PHP
php 中的信号处理操作实例详解
2020/03/04 PHP
用javascript实现无刷新更新数据的详细步骤 asp
2006/12/26 Javascript
JQuery扩展插件Validate—6 radio、checkbox、select的验证
2011/09/05 Javascript
javascript打印大全(打印页面设置/打印预览代码)
2013/03/29 Javascript
js生成随机数之random函数随机示例
2013/12/20 Javascript
JQuery的Ajax请求实现局部刷新的简单实例
2014/02/11 Javascript
jQuery+PHP实现动态数字展示特效
2015/03/14 Javascript
JS+CSS实现下拉列表框美化效果(3款)
2015/08/15 Javascript
javascript实现图片轮播效果
2016/01/20 Javascript
利用Jquery队列实现根据输入数量显示的动画
2016/09/01 Javascript
值得分享和收藏的xmlplus组件学习教程
2017/05/05 Javascript
vue轮播图插件vue-awesome-swiper的使用代码实例
2017/07/10 Javascript
浅谈VUE监听窗口变化事件的问题
2018/02/24 Javascript
JS实现百度网盘任意文件强制下载功能
2018/08/31 Javascript
js函数柯里化的方法和作用实例分析
2020/04/11 Javascript
python线程、进程和协程详解
2016/07/19 Python
Python加密方法小结【md5,base64,sha1】
2017/07/13 Python
Python 判断 有向图 是否有环的实例讲解
2018/02/01 Python
python opencv之分水岭算法示例
2018/02/24 Python
postman传递当前时间戳实例详解
2019/09/14 Python
python数据类型可变不可变知识点总结
2020/03/06 Python
详解python命令提示符窗口下如何运行python脚本
2020/09/11 Python
用CSS3的box-reflect设置文字倒影效果的方法讲解
2016/03/07 HTML / CSS
html5需遵循的6个设计原则
2016/04/27 HTML / CSS
个人租房协议书范本
2014/09/30 职场文书
2014年计生协会工作总结
2014/11/21 职场文书
典型事迹材料范文
2014/12/29 职场文书
优秀班干部主要事迹材料
2015/11/04 职场文书
《战锤40K:暗潮》跳票至9月 公布新宣传片
2022/04/03 其他游戏
python疲劳驾驶困倦低头检测功能的实现
2022/04/04 Python