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编码规范-php coding standard
Mar 16 PHP
动易数据转成dedecms的php程序
Apr 07 PHP
php编程实现获取excel文档内容的代码实例
Jun 28 PHP
yii框架中的Url生产问题小结
Jan 16 PHP
php实现简单洗牌算法
Jun 18 PHP
用PHP来计算某个目录大小的方法
Apr 01 PHP
PHP+Mysql+jQuery文件下载次数统计实例讲解
Oct 10 PHP
php获得客户端浏览器名称及版本的方法(基于ECShop函数)
Dec 23 PHP
PHP+apc+ajax实现的ajax_upload上传进度条代码
Jan 25 PHP
thinkPHP实现递归循环栏目并按照树形结构无限极输出的方法
May 19 PHP
php+ajax+json 详解及实例代码
Dec 12 PHP
Laravel5.1 框架Middleware中间件基本用法实例分析
Jan 04 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
Smarty结合Ajax实现无刷新留言本实例
2007/01/02 PHP
PHP 5.0对象模型深度探索之类的静态成员
2008/03/27 PHP
apache php模块整合操作指南
2012/11/16 PHP
php读取EXCEL文件 php excelreader读取excel文件
2012/12/06 PHP
Linux中用PHP判断程序运行状态的2个方法
2014/05/04 PHP
php导入大量数据到mysql性能优化技巧
2014/12/29 PHP
thinkphp多层MVC用法分析
2015/12/30 PHP
PHP函数按引用传递参数及函数可选参数用法示例
2018/06/04 PHP
laravel利用中间件做防非法登录和权限控制示例
2019/10/21 PHP
GWT中复制到剪贴板 js+flash实现复制 兼容性比较好
2010/03/07 Javascript
jQuery 1.8 Release版本发布了
2012/08/14 Javascript
js实现弹出窗口、页面变成灰色并不可操作的例子分享
2014/05/10 Javascript
写给小白的JavaScript引擎指南
2015/12/04 Javascript
基于JavaScript判断浏览器到底是关闭还是刷新(超准确)
2016/02/01 Javascript
javascript中获取元素标签中间的内容的实现方法
2016/10/08 Javascript
canvas实现动态小球重叠效果
2017/02/06 Javascript
javascript实现二叉树的代码
2017/06/08 Javascript
nodejs初始化init的示例代码
2018/10/10 NodeJs
关于JSON解析的实现过程解析
2019/10/08 Javascript
浅析vue中的nextTick
2020/12/28 Vue.js
使用Python解析JSON数据的基本方法
2015/10/15 Python
Python批量查询域名是否被注册过
2017/06/21 Python
pygame 精灵的行走及二段跳的实现方法(必看篇)
2017/07/10 Python
使用Python进行AES加密和解密的示例代码
2018/02/02 Python
python pyheatmap包绘制热力图
2018/11/09 Python
对python字典过滤条件的实例详解
2019/01/22 Python
简单了解python元组tuple相关原理
2019/12/02 Python
pycharm解决关闭flask后依旧可以访问服务的问题
2020/04/03 Python
时尚的CSS3进度条效果
2012/02/22 HTML / CSS
灵泰克Java笔试题
2016/01/09 面试题
农业开发项目建议书
2014/05/16 职场文书
保护动物的标语
2014/06/11 职场文书
教师党员个人自我剖析材料
2014/09/29 职场文书
大学生翘课检讨书范文
2014/10/06 职场文书
一个独生女的故事观后感
2015/06/04 职场文书
售房协议书范本
2015/08/11 职场文书