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生成缩略图的代码
Jan 12 PHP
Look And Say 序列php实现代码
May 22 PHP
thinkphp 多表 事务详解
Jun 17 PHP
php中的boolean(布尔)类型详解
Oct 28 PHP
php 根据url自动生成缩略图并处理高并发问题
Jan 23 PHP
浅谈thinkphp的实例化模型
Jan 04 PHP
PHP中header用法小结
May 23 PHP
利用switch语句进行多选一判断的实例代码
Nov 14 PHP
PHP/HTML混写的四种方式总结
Feb 27 PHP
CentOS系统中PHP安装扩展的方式汇总
Apr 09 PHP
PHP简单实现遍历目录下特定文件的方法小结
May 22 PHP
PHP实现支持CURL字符串证书传输的方法
Mar 23 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
解析mysql 表中的碎片产生原因以及清理
2013/06/22 PHP
PHP传值到不同页面的三种常见方式及php和html之间传值问题
2015/11/19 PHP
PHP实现验证码校验功能
2017/11/16 PHP
通过PHP实现获取访问用户IP
2020/05/09 PHP
用JQuery 实现的自定义对话框
2007/03/24 Javascript
一个基于jquery的图片切换效果
2010/07/06 Javascript
jQuery对表单的操作代码集合
2011/04/06 Javascript
Js四则运算函数代码
2012/07/21 Javascript
js自执行函数的几种不同写法的比较
2012/08/16 Javascript
用js控制组织结构图可以任意拖拽到指定位置
2014/01/17 Javascript
Js与Jq 获取页面元素值的方法和差异对比
2015/04/30 Javascript
jQuery密码强度检测插件passwordStrength用法实例分析
2015/10/30 Javascript
JS动态给对象添加事件的简单方法
2016/07/19 Javascript
ionic实现带字的toggle滑动组件
2016/08/27 Javascript
基于JavaScript实现前端文件的断点续传
2016/10/17 Javascript
原生js更改css样式的两种方式
2017/03/15 Javascript
使用travis-ci如何持续部署node.js应用详解
2017/07/30 Javascript
15个简单的JS编码标准让你的代码更整洁(小结)
2020/07/16 Javascript
python笔记(1) 关于我们应不应该继续学习python
2012/10/24 Python
Python for循环与range函数的使用详解
2019/03/23 Python
pytorch的梯度计算以及backward方法详解
2020/01/10 Python
Python csv文件记录流程代码解析
2020/07/16 Python
HTML5计时器小例子
2013/10/15 HTML / CSS
韩国三大免税店之一:THE GRAND 中文免税店
2016/07/21 全球购物
澳大利亚最受欢迎的美发和美容在线商店:Catwalk
2018/12/12 全球购物
瑞士设计师家具和家居饰品网上商店:Bruno Wickart
2019/03/18 全球购物
日本最大的彩色隐形眼镜销售网站:CharmColor
2020/09/09 全球购物
销售人员中英文自荐信
2013/09/22 职场文书
农民工预备党员思想汇报
2014/09/14 职场文书
继承权公证书范本
2015/01/23 职场文书
劳动保障个人工作总结
2015/03/04 职场文书
2015年度优秀员工自荐书
2015/03/06 职场文书
签订劳动合同通知书
2015/04/16 职场文书
浙江省杭州市平均工资标准是多少?
2019/07/09 职场文书
美甲店的创业计划书模板
2019/08/23 职场文书
详解MySQL的内连接和外连接
2023/05/08 MySQL