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模拟SQL Server的两个日期处理函数
Oct 09 PHP
php变量范围介绍
Oct 15 PHP
用mysql_fetch_array()获取当前行数据的方法详解
Jun 05 PHP
PHP判断远程图片是否存在的几种方法
May 04 PHP
php递归法读取目录及文件的方法
Jan 30 PHP
smarty模板引擎之分配数据类型
Mar 30 PHP
PHP中使用Memache作为进程锁的操作类分享
Mar 30 PHP
Symfony2在Nginx下的配置方法图文教程
Feb 04 PHP
中高级PHP程序员应该掌握哪些技术?
Sep 23 PHP
PHP使用递归算法无限遍历数组示例
Jan 13 PHP
PHP使用finfo_file()函数检测上传图片类型的实现方法
Apr 18 PHP
php使用 readfile() 函数设置文件大小大小的方法
Aug 11 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
PHP API接口必备之输出json格式数据示例代码
2017/06/27 PHP
Phpstorm+Xdebug断点调试PHP的方法
2018/05/14 PHP
PHP使用 Imagick 扩展实现图片合成,圆角处理功能示例
2019/09/09 PHP
PHP如何通过带尾指针的链表实现'队列'
2020/10/22 PHP
javascript当onmousedown、onmouseup、onclick同时应用于同一个标签节点Element
2010/01/05 Javascript
JS中动态添加事件(绑定事件)的代码
2011/01/09 Javascript
jQuery实现div随意拖动的实例代码(通用代码)
2016/01/28 Javascript
Google 地图叠加层实例讲解
2016/08/06 Javascript
AngularJS实现在ng-Options加上index的解决方法
2016/11/03 Javascript
关于AngularJs数据的本地存储详解
2017/01/20 Javascript
Bootstrap modal 多弹窗之叠加关闭阴影遮罩问题的解决方法
2017/02/27 Javascript
bootstrap的工具提示实例代码
2017/05/17 Javascript
es6基础学习之解构赋值
2018/12/10 Javascript
JavaScript中的回调函数实例讲解
2019/01/27 Javascript
微信小程序导航栏跟随滑动效果的实现代码
2019/05/14 Javascript
python 多进程通信模块的简单实现
2014/02/20 Python
在Python的Django框架中simple-todo工具的简单使用
2015/05/30 Python
Python实现导出数据生成excel报表的方法示例
2017/07/12 Python
python+selenium识别验证码并登录的示例代码
2017/12/21 Python
python实现用户管理系统
2018/01/10 Python
python删除某个字符
2018/03/19 Python
解决nohup重定向python输出到文件不成功的问题
2018/05/11 Python
cmd运行python文件时对结果进行保存的方法
2018/05/16 Python
mac安装scrapy并创建项目的实例讲解
2018/06/13 Python
python接入支付宝的实例操作
2020/07/20 Python
Python爬虫入门教程01之爬取豆瓣Top电影
2021/01/24 Python
详解html5 canvas常用api总结(二)--绘图API
2016/12/14 HTML / CSS
国家领导干部党的群众路线教育实践活动批评与自我批评材料
2014/09/23 职场文书
党员剖析材料范文
2014/12/18 职场文书
淘宝好评语句大全
2014/12/31 职场文书
大学生旷课检讨书1000字
2015/02/19 职场文书
债务纠纷代理词
2015/05/25 职场文书
商务信函英语问候语
2015/11/10 职场文书
宣传部部长竞选稿
2015/11/21 职场文书
python区块链持久化和命令行接口实现简版
2022/05/25 Python
输入框跟随文字内容适配宽实现示例
2022/08/14 Javascript