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应用提速面面观
Oct 09 PHP
php 实现进制转换(二进制、八进制、十六进制)互相转换实现代码
Oct 22 PHP
php下使用iconv需要注意的问题
Nov 20 PHP
php中批量删除Mysql中相同前缀的数据表的代码
Jul 01 PHP
php实现的太平洋时间和北京时间互转的自定义函数分享
Aug 19 PHP
php实现数组中索引关联数据转换成json对象的方法
Jul 08 PHP
php面向对象值单例模式
May 03 PHP
PHP Yaf框架的简单安装使用教程(推荐)
Jun 08 PHP
PHP微信API接口类
Aug 22 PHP
PHP查看SSL证书信息的方法
Sep 22 PHP
PHP完全二叉树定义与实现方法示例
Oct 09 PHP
PHP中实现中文字串截取无乱码的解决方法
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
php程序之die调试法 快速解决错误
2009/09/17 PHP
ThinkPHP调用百度翻译类实现在线翻译
2014/06/26 PHP
详解WordPress中用于合成数组的wp_parse_args()函数
2015/12/18 PHP
基于PHP实现短信验证码发送次数限制
2020/07/11 PHP
让人印象深刻的10个jQuery手风琴效果应用
2012/05/08 Javascript
jquery 删除字符串最后一个字符的方法解析
2014/02/11 Javascript
根据当前时间在jsp页面上显示上午或下午
2014/08/18 Javascript
Javascript中实现String.startsWith和endsWith方法
2015/06/10 Javascript
基于jQuery通过jQuery.form.js插件实现异步上传
2015/12/13 Javascript
谷歌Chrome浏览器扩展程序开发小记
2016/01/06 Javascript
AngularJs  E2E Testing 详解
2016/09/02 Javascript
JS请求servlet功能示例
2017/06/01 Javascript
微信小程序 配置顶部导航条标题颜色的实现方法
2017/09/20 Javascript
Angular17之Angular自定义指令详解
2018/01/21 Javascript
nodejs高大上的部署方式(PM2)
2018/09/11 NodeJs
Vuex的初探与实战小结
2018/11/26 Javascript
微信小程序实现页面浮动导航
2019/01/28 Javascript
JavaScript Event Loop相关原理解析
2020/06/10 Javascript
如何在vue 中使用柱状图 并自修改配置
2021/01/21 Vue.js
python根据出生日期返回年龄的方法
2015/03/26 Python
Python守护进程用法实例分析
2015/06/04 Python
python 高效去重复 支持GB级别大文件的示例代码
2018/11/08 Python
python drf各类组件的用法和作用
2021/01/12 Python
浅谈CSS3中的变形功能-transform功能
2017/12/27 HTML / CSS
100%有机精油,美容油:House of Pure Essence
2018/10/30 全球购物
L*SPACE官网:比基尼、泳装和度假服装
2019/03/18 全球购物
Yummie官方网站:塑身衣和衣柜必需品
2019/10/29 全球购物
一套Delphi的笔试题二
2013/05/11 面试题
家长会主持词
2014/03/26 职场文书
软件售后服务方案
2014/05/29 职场文书
医院合作协议书
2014/08/19 职场文书
结对共建协议书
2014/08/20 职场文书
教师教育教学随笔
2015/08/15 职场文书
2016年七夕爱情寄语
2015/12/04 职场文书
2016年优秀党务工作者先进事迹材料
2016/02/29 职场文书
CSS中使用grid布局实现一套模板多种布局
2022/07/15 HTML / CSS