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 相关文章推荐
source.php查看源文件
Dec 09 PHP
PHP 服务器配置(使用Apache及IIS两种方法)
Jun 01 PHP
php用数组返回无限分类的列表数据的代码
Aug 08 PHP
分享下PHP register_globals 值为on与off的理解
Sep 26 PHP
php输入流php://input使用浅析
Sep 02 PHP
PHP实现手机号码中间四位用星号(*)隐藏的自定义函数分享
Sep 27 PHP
PHP文件缓存smarty模板应用实例分析
Feb 26 PHP
PHP中include/require/include_once/require_once使用心得
Aug 28 PHP
PHP+jQuery实现滚屏无刷新动态加载数据功能详解
May 04 PHP
PHP 布尔值的自增与自减的实现方法
May 03 PHP
thinkphp5实现无限级分类
Feb 18 PHP
PHP使用HTML5 FileApi实现Ajax上传文件功能示例
Jul 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
php的chr和ord函数实现字符加减乘除运算实现代码
2011/12/05 PHP
一些需要禁用的PHP危险函数(disable_functions)
2012/02/23 PHP
php cli模式学习(PHP命令行模式)
2013/06/03 PHP
WAMP环境中扩展oracle函数库(oci)
2015/06/26 PHP
利用腾讯的ip地址库做ip物理地址定位
2010/07/24 Javascript
高效的表格行背景隔行变色及选定高亮的JS代码
2010/12/04 Javascript
分享10篇优秀的jQuery幻灯片制作教程及应用案例
2011/04/16 Javascript
js导出格式化的excel 实例方法
2013/07/17 Javascript
jquery 追加tr和删除tr示例代码
2013/09/12 Javascript
node.js中watch机制详解
2014/11/17 Javascript
JavaScript实现数组降维详解
2017/01/05 Javascript
vue.js实现单选框、复选框和下拉框示例
2017/07/18 Javascript
bootstrap select下拉搜索插件使用方法详解
2017/11/23 Javascript
webpack中如何使用雪碧图的示例代码
2018/11/11 Javascript
jQuery模拟html下拉多选框的原生实现方法示例
2019/05/30 jQuery
mpvue 项目初始化及实现授权登录的实现方法
2020/07/20 Javascript
js前端传json后台接收‘‘被转为quot的问题解决
2020/11/12 Javascript
Python 随机生成中文验证码的实例代码
2013/03/20 Python
Python学习笔记(二)基础语法
2014/06/06 Python
Python使用numpy模块创建数组操作示例
2018/06/20 Python
Python使用正则表达式分割字符串的实现方法
2019/07/16 Python
python导入不同目录下的自定义模块过程解析
2019/11/18 Python
TensorFlow绘制loss/accuracy曲线的实例
2020/01/21 Python
python不相等的两个字符串的 if 条件判断为True详解
2020/03/12 Python
django实现将后台model对象转换成json对象并传递给前端jquery
2020/03/16 Python
Python tkinter之ComboBox(下拉框)的使用简介
2021/02/05 Python
浅析HTML5页面元素及属性
2021/01/20 HTML / CSS
澳大利亚领先的在线美容商城:Adore Beauty
2017/04/14 全球购物
日本最大的彩色隐形眼镜销售网站:CharmColor
2020/09/09 全球购物
安全技术说明书
2014/05/09 职场文书
2015年党风廉政建设责任书
2015/01/29 职场文书
社会实践单位意见
2015/06/05 职场文书
幼儿园毕业致辞
2015/07/29 职场文书
2016年植树节红领巾广播稿
2015/12/17 职场文书
2016个人先进事迹材料范文
2016/03/01 职场文书
Python中的turtle画箭头,矩形,五角星
2022/03/16 Python