php设计模式 Visitor 访问者模式


Posted in PHP onJune 28, 2011
<?php 
/** 
* 访问者模式 
* 
* 表示一个作用于某对象结构中的各元素的操作,可以在不改变各元素的类的前提下定义作用于这些元素的新操作 
* 
*/ 
abstract class Visitor 
{ 
abstract public function visitCroncreteElementA($element); 
abstract public function visitCroncreteElementB($element); 
} 
class ConcreteVisitor1 extends Visitor 
{ 
public function visitCroncreteElementA($element) 
{ 
echo get_class($element)." visit 1A<br/>"; 
} 
public function visitCroncreteElementB($element) 
{ 
echo get_class($element)." visit 1B<br/>"; 
} 
} 
class ConcreteVisitor2 extends Visitor 
{ 
public function visitCroncreteElementA($element) 
{ 
echo get_class($element)." visit 2A<br/>"; 
} 
public function visitCroncreteElementB($element) 
{ 
echo get_class($element)." visit 2B<br/>"; 
} 
} 
abstract class Element 
{ 
abstract public function accept($visitor); 
} 
class ConcreteElementA extends Element 
{ 
public function accept($visitor) 
{ 
$visitor->visitCroncreteElementA($this); 
} 
} 
class ConcreteElementB extends Element 
{ 
public function accept($visitor) 
{ 
$visitor->visitCroncreteElementB($this); 
} 
} 
class ObjectStructure 
{ 
private $_elements = array(); 
public function attach($element) 
{ 
$this->_elements[] = $element; 
} 
public function detach($element) 
{ 
if($key = array_search($element,$this->_elements) !== false) unset($this->_elements[$key]); 
} 
public function accept($visitor) 
{ 
foreach($this->_elements as $element) 
{ 
$element->accept($visitor); 
} 
} 
} 
// 
$objOS = new ObjectStructure(); 
$objOS->attach(new ConcreteElementA()); 
$objOS->attach(new ConcreteElementB()); 
$objCV1 = new ConcreteVisitor1(); 
$objCV2 = new ConcreteVisitor2(); 
$objOS->accept($objCV1); 
$objOS->accept($objCV2);
PHP 相关文章推荐
PHP 多维数组排序(usort,uasort)
Jun 30 PHP
php实现快速排序法函数代码
Aug 27 PHP
PHP imagegrabscreen和imagegrabwindow(截取网站缩略图)的实例代码
Nov 07 PHP
利用phpExcel实现Excel数据的导入导出(全步骤详细解析)
Nov 26 PHP
php版小黄鸡simsimi聊天机器人接口分享
Jan 26 PHP
linux下编译安装memcached服务
Aug 03 PHP
destoon切换城市后实现logo旁边显示地区名称的方法
Aug 21 PHP
php项目开发中用到的快速排序算法分析
Jun 25 PHP
php 解决substr()截取中文字符乱码问题
Jul 18 PHP
浅析php中array_map和array_walk的使用对比
Nov 20 PHP
基于swoole实现多人聊天室
Jun 14 PHP
Laravel5.5以下版本中如何自定义日志行为详解
Aug 01 PHP
php懒人函数 自动添加数据
Jun 28 #PHP
php中比较简单的导入phpmyadmin生成的sql文件的方法
Jun 28 #PHP
从康盛产品(discuz)提取出来的模板类
Jun 28 #PHP
php skymvc 一款轻量、简单的php
Jun 28 #PHP
关于php mvc开发模式的感想
Jun 28 #PHP
yii框架源码分析之创建controller代码
Jun 28 #PHP
关于PHP中Object对象的笔记分享
Jun 28 #PHP
You might like
建立文件交换功能的脚本(三)
2006/10/09 PHP
PHP 多进程 解决难题
2009/06/22 PHP
php shell超强免杀、减少体积工具实现代码
2012/10/16 PHP
php字符编码转换之gb2312转为utf8
2013/10/28 PHP
PHP获取栏目的所有子级和孙级栏目的ID号示例
2014/04/01 PHP
php操作csv文件代码实例汇总
2014/09/22 PHP
Yii2.0表关联查询实例分析
2016/07/18 PHP
浅谈下拉菜单中的Option对象
2015/05/10 Javascript
获取阴历(农历)和当前日期的js代码
2016/02/15 Javascript
全面了解javascript三元运算符
2016/06/27 Javascript
走进AngularJs之过滤器(filter)详解
2017/02/17 Javascript
轻松学习Javascript闭包
2017/03/01 Javascript
JavaScript中 DOM操作方法小结
2017/04/25 Javascript
三分钟学会用ES7中的Async/Await进行异步编程
2018/06/14 Javascript
vue 监听键盘回车事件详解 @keyup.enter || @keyup.enter.native
2018/08/25 Javascript
微信小程序中使用echarts的实现方法
2019/04/24 Javascript
JS实现简易计算器
2020/02/14 Javascript
[01:09]DOTA2次级职业联赛 - ishow.HMM战队宣传片
2014/12/01 DOTA
Python的内存泄漏及gc模块的使用分析
2014/07/16 Python
python利用正则表达式提取字符串
2016/12/08 Python
Mac中Python 3环境下安装scrapy的方法教程
2017/10/26 Python
Python基于FTP模块实现ftp文件上传操作示例
2018/04/23 Python
Python开发网站目录扫描器的实现
2019/02/21 Python
python查询文件夹下excel的sheet名代码实例
2019/04/02 Python
Python切割图片成九宫格的示例代码
2020/03/10 Python
施华洛世奇日本官网:SWAROVSKI日本
2018/05/04 全球购物
个人简历自我鉴定
2013/10/11 职场文书
影视艺术学院毕业生自荐信
2013/11/13 职场文书
商场中秋节活动方案
2014/02/07 职场文书
小学生国庆演讲稿
2014/09/05 职场文书
2015年个人剖析材料范文
2014/12/29 职场文书
入党个人总结范文
2015/03/02 职场文书
2015年财务人员工作总结
2015/04/10 职场文书
观后感开头
2015/06/19 职场文书
血轮眼轮回眼特效 html+css
2021/03/31 HTML / CSS
Nginx服务器添加Systemd自定义服务过程解析
2021/03/31 Servers