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代码
Apr 09 PHP
php session_start()关于Cannot send session cache limiter - headers already sent错误解决方法
Nov 27 PHP
phpMyAdmin链接MySql错误 个人解决方案
Dec 28 PHP
php产生随机数的两种方法实例代码 输出随机IP
Apr 08 PHP
php实现12306余票查询、价格查询示例
Apr 17 PHP
php自动提交表单的方法(基于fsockopen与curl)
May 09 PHP
PHP 中使用ajax时一些常见错误总结整理
Feb 27 PHP
PHP十六进制颜色随机生成器功能示例
Jul 24 PHP
PHP session垃圾回收机制实例分析
Jun 28 PHP
php使用redis的有序集合zset实现延迟队列应用示例
Feb 20 PHP
php设计模式之享元模式分析【星际争霸游戏案例】
Mar 23 PHP
tp5.1 框架路由操作-URL生成实例分析
May 26 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
萌王史莱姆”萌王性别尴尬!那“萌战”归女组还是男?
2018/12/17 日漫
在普通HTTP上安全地传输密码
2007/07/21 PHP
php flv视频时间获取函数
2010/06/29 PHP
php+ajax实时刷新简单实例
2015/02/25 PHP
php中文验证码实现方法
2015/06/18 PHP
thinkphp分页集成实例
2017/07/24 PHP
兼容Mozilla必须知道的知识。
2007/01/09 Javascript
符合W3C网页标准的iframe标签的使用方法
2007/07/19 Javascript
JS双击变input框批量修改内容
2016/12/12 Javascript
Javascript的this用法
2017/01/16 Javascript
浅析JS中的 map, filter, some, every, forEach, for in, for of 用法总结
2017/03/29 Javascript
原生JavaScript实现remove()和recover()功能示例
2018/07/24 Javascript
微信小程序动态显示项目倒计时
2019/06/20 Javascript
js获取 gif 的帧数的代码实例
2019/09/10 Javascript
vue+ts下对axios的封装实现
2020/02/18 Javascript
react结合bootstrap实现评论功能
2020/05/30 Javascript
浅谈vue中get请求解决传输数据是数组格式的问题
2020/08/03 Javascript
关于IDEA中的.VUE文件报错 Export declarations are not supported by current JavaScript version
2020/10/17 Javascript
UEditor 自定义图片视频尺寸校验功能的实现代码
2020/10/20 Javascript
在windows下快速搭建web.py开发框架方法
2016/04/22 Python
json跨域调用python的方法详解
2017/01/11 Python
python正则表达式及使用正则表达式的例子
2018/01/22 Python
基于Python实现的微信好友数据分析
2018/02/26 Python
在macOS上搭建python环境的实现方法
2019/08/13 Python
python sorted函数原理解析及练习
2020/02/10 Python
Tensorflow加载Vgg预训练模型操作
2020/05/26 Python
python框架flask入门之环境搭建及开启调试
2020/06/07 Python
监理员的岗位职责
2013/11/13 职场文书
国际商务系学生个人的自我评价
2013/11/26 职场文书
中学生打架检讨书
2014/02/10 职场文书
服务型党组织建设典型材料
2014/05/07 职场文书
心理健康日活动总结
2014/05/08 职场文书
投标承诺函格式
2015/01/21 职场文书
门店店长岗位职责
2015/04/14 职场文书
2015年事业单位工作总结
2015/04/27 职场文书
室外天线与收音机天线杆接合方法
2022/04/05 无线电