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 session 预定义数组
Mar 16 PHP
CI框架在CLI下执行占用内存过大问题的解决方法
Jun 17 PHP
destoon会员注册提示“数据校验失败(2)”解决方法
Jun 21 PHP
PHP获取一年中每个星期的开始和结束日期的方法
Feb 12 PHP
PHP Streams(流)详细介绍及使用
May 12 PHP
PHP常见数组函数用法小结
Mar 21 PHP
php加密解密字符串示例
Oct 13 PHP
php 遍历目录,生成目录下每个文件的md5值并写入到结果文件中
Dec 12 PHP
Thinkphp实现站点静态化的方法详解
Mar 21 PHP
浅谈PHP发送HTTP请求的几种方式
Jul 25 PHP
ThinkPHP框架实现导出excel数据的方法示例【基于PHPExcel】
May 12 PHP
PHP使用curl_multi_select解决curl_multi网页假死问题的方法
Aug 15 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 SQL防注入代码集合
2008/04/25 PHP
php分页思路以及在ZF中的使用
2012/05/30 PHP
记录Yii2框架开发微信公众号遇到的问题及解决方法
2018/07/20 PHP
centos7上编译安装php7以php-fpm方式连接apache
2018/11/08 PHP
jqplot通过ajax动态画折线图的方法及思路
2013/12/08 Javascript
使用原生js实现页面蒙灰(mask)效果示例代码
2014/06/20 Javascript
js实现键盘Enter键提交表单的方法
2015/05/27 Javascript
Javascript类型系统之undefined和null浅析
2016/07/13 Javascript
浅谈JSON.stringify()和JOSN.parse()方法的不同
2016/08/29 Javascript
etmvc+jQuery EasyUI+combobox多值操作实现角色授权实例
2016/11/09 Javascript
详谈Ajax请求中的async:false/true的作用(ajax 在外部调用问题)
2017/02/10 Javascript
vue如何实现observer和watcher源码解析
2017/03/09 Javascript
JavaScript实现网页头部进度条刷新
2017/04/16 Javascript
一次围绕setTimeout的前端面试经验分享
2017/06/15 Javascript
Three.js利用Detector.js插件如何实现兼容性检测详解
2017/09/26 Javascript
JavaScript面向对象编程小游戏---贪吃蛇代码实例
2019/05/15 Javascript
vue+element实现表单校验功能
2019/05/20 Javascript
基于Angular 8和Bootstrap 4实现动态主题切换的示例代码
2020/02/11 Javascript
[07:47]DOTA2国际邀请赛采访专栏:探访Valve总部
2013/08/08 DOTA
[01:06:12]VP vs NIP 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
python进程类subprocess的一些操作方法例子
2014/11/22 Python
Python入门之三角函数atan2()函数详解
2017/11/08 Python
Python如何生成树形图案
2018/01/03 Python
python基于itchat模块实现微信防撤回
2019/04/29 Python
Django基础三之视图函数的使用方法
2019/07/18 Python
用Python徒手撸一个股票回测框架搭建【推荐】
2019/08/05 Python
Python实现验证码识别
2020/06/15 Python
8款精美的CSS3表单设计(登录表单/下拉选择/按钮附演示及源码)
2013/02/04 HTML / CSS
css3 按钮 利用css3实现超酷下载按钮
2013/03/18 HTML / CSS
html5 跨文档消息传输示例探讨
2013/04/01 HTML / CSS
旧时光糖果:Old Time Candy
2018/02/05 全球购物
美国在线打印网站:Overnight Prints
2018/10/11 全球购物
校园报刊亭的创业计划书
2014/01/02 职场文书
教学器材管理制度
2014/01/26 职场文书
开学第一周日记(三篇范文)
2019/08/23 职场文书
浅谈GO中的Channel以及死锁的造成
2022/03/18 Golang