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 相关文章推荐
定制404错误页面,并发信给管理员的程序
Oct 09 PHP
PHP 内存缓存加速功能memcached安装与用法
Sep 03 PHP
PHP文章采集URL补全函数(FormatUrl)
Aug 02 PHP
标准PHP的AES加密算法类
Mar 12 PHP
php curl 上传文件代码实例
Apr 27 PHP
浅谈PDO的rowCount函数
Jun 18 PHP
PHP使用PDO操作数据库的乱码问题解决方法
Apr 08 PHP
php 多文件上传的实现实例
Oct 23 PHP
PHP 7.0新增加的特性介绍
Jun 08 PHP
LaravelS通过Swoole加速Laravel/Lumen详解
Mar 02 PHP
PHP PDOStatement::getAttribute讲解
Feb 01 PHP
laravel框架数据库配置及操作数据库示例
Oct 10 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 采集书并合成txt格式的实现代码
2009/03/01 PHP
PHP处理SQL脚本文件导入到MySQL的代码实例
2014/03/17 PHP
php操作(删除,提取,增加)zip文件方法详解
2015/03/12 PHP
Laravel 5框架学习之表单验证
2015/04/08 PHP
php验证身份证号码正确性的函数
2016/07/20 PHP
php foreach如何跳出两层循环(详解)
2016/11/05 PHP
PHP耦合设计模式实例分析
2018/08/08 PHP
PHP哈希表实现算法原理解析
2020/12/11 PHP
js可突破windows弹退效果代码
2008/08/09 Javascript
JavaScript 页面坐标相关知识整理
2010/01/09 Javascript
仅img元素创建后不添加到文档中会执行onload事件的解决方法
2011/07/31 Javascript
更换select下拉菜单背景样式的实现代码
2011/12/20 Javascript
jQuery 瀑布流 浮动布局(一)(延迟AJAX加载图片)
2012/05/23 Javascript
Jquery 模板数据绑定插件的使用方法详解
2013/07/08 Javascript
JQuery中DOM实现事件移除的方法
2015/06/13 Javascript
基于JavaScript实现单选框下拉菜单添加文件效果
2016/06/26 Javascript
JavaScript中关键字 in 的使用方法详解
2016/10/17 Javascript
JS定时器用法分析【时钟与菜单中的应用】
2016/12/21 Javascript
canvas轨迹回放功能实现
2017/12/20 Javascript
layui添加动态菜单与选项卡 AJAX请求的例子
2019/09/25 Javascript
详解vue-template-admin三级路由无法缓存的解决方案
2020/03/10 Javascript
[01:36]DOTA2完美大师赛趣味视频之与队友相处的十万个技巧
2017/11/19 DOTA
python读取和保存视频文件
2018/04/16 Python
python和shell获取文本内容的方法
2018/06/05 Python
Python3数字求和的实例
2019/02/19 Python
使用python turtle画高达
2020/01/19 Python
python itsdangerous模块的具体使用方法
2020/02/17 Python
Expedia英国:全球最大的在线旅游公司
2017/09/07 全球购物
params有什么用
2016/03/01 面试题
日语专业毕业生自荐书
2014/06/18 职场文书
买房子个人收入证明
2014/10/12 职场文书
查摆问题自查报告范文
2014/10/13 职场文书
2015年社区居委会工作总结
2015/05/18 职场文书
mybatis使用oracle进行添加数据的方法
2021/04/27 Oracle
什么是css原子化,有什么用?
2022/04/24 HTML / CSS
Mysql的Table doesn't exist问题及解决
2022/12/24 MySQL