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数字格式化
Dec 06 PHP
php select,radio和checkbox默认选择的实现方法
May 15 PHP
PHP curl_setopt()函数实例代码与参数分析
Jun 02 PHP
php中使用preg_replace函数匹配图片并加上链接的方法
Feb 06 PHP
mongo Table类文件 获取MongoCursor(游标)的实现方法分析
Jul 01 PHP
解决file_get_contents无法请求https连接的方法
Dec 17 PHP
PHP获取ip对应地区和使用网络类型的方法
Mar 11 PHP
PHP中文竖排转换实现方法
Oct 23 PHP
一个简单至极的PHP缓存类代码
Oct 23 PHP
深入解析PHP的Yii框架中的event事件机制
Mar 17 PHP
php时间戳转换代码详解
Aug 04 PHP
PHP策略模式写法
Apr 01 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接口与接口引用的深入解析
2013/08/09 PHP
PHP7.0安装笔记整理
2015/08/28 PHP
PHP实现清除wordpress里恶意代码
2015/10/21 PHP
PHP+HTML+JavaScript+Css实现简单爬虫开发
2016/03/28 PHP
PHP PDOStatement::bindValue讲解
2019/01/30 PHP
利用jQuery的$.event.fix函数统一浏览器event事件处理
2009/12/21 Javascript
JavaScript高级程序设计 阅读笔记(二十一) JavaScript中的XML
2012/09/14 Javascript
JS+CSS实现自动改变切换方向图片幻灯切换效果的方法
2015/03/02 Javascript
JavaScript文本框脚本编写的注意事项
2016/01/25 Javascript
分享js粘帖屏幕截图到web页面插件screenshot-paste
2020/08/21 Javascript
不能不知道的10个angularjs英文学习网站
2016/03/23 Javascript
JS实用技巧小结(屏蔽错误、div滚动条设置、背景图片位置等)
2016/06/16 Javascript
JavaScript——DOM操作——Window.document对象详解
2016/07/14 Javascript
Bootstrap的fileinput插件实现多文件上传的方法
2016/09/05 Javascript
JS实现textarea通过换行或者回车把多行数字分割成数组并且去掉数组中空的值
2018/10/29 Javascript
mpvue+vant app搭建微信小程序的方法步骤
2019/02/11 Javascript
详解JavaScript 新语法之Class 的私有属性与私有方法
2019/04/23 Javascript
vue实现把接口单独存放在一个文件方式
2020/08/13 Javascript
[03:17]2016完美“圣”典风云人物:冷冷专访
2016/12/08 DOTA
利用Python-iGraph如何绘制贴吧/微博的好友关系图详解
2017/11/02 Python
读取本地json文件,解析json(实例讲解)
2017/12/06 Python
Python实现的爬取百度文库功能示例
2019/02/16 Python
详解【python】str与json类型转换
2019/04/29 Python
python爬取本站电子书信息并入库的实现代码
2020/01/20 Python
解决django接口无法通过ip进行访问的问题
2020/03/27 Python
Python eval函数原理及用法解析
2020/11/14 Python
HTML5新增的Css选择器、伪类介绍
2013/08/07 HTML / CSS
伦敦高级内衣品牌:Agent Provocateur(大内密探)
2016/08/23 全球购物
留学推荐信写作指南
2014/01/25 职场文书
幼儿评语大全
2014/04/30 职场文书
资金申请报告范文
2015/05/14 职场文书
采购员工作总结范文
2015/08/12 职场文书
2016感恩母亲节校园广播稿
2015/12/17 职场文书
优秀范文:读《红岩》有感3篇
2019/10/14 职场文书
MySQL 隔离数据列和前缀索引的使用总结
2021/05/14 MySQL
浅析Python OpenCV三种滤镜效果
2022/04/11 Python