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 相关文章推荐
967 个函式
Oct 09 PHP
多数据表共用一个页的新闻发布
Oct 09 PHP
一个简单的自动发送邮件系统(一)
Oct 09 PHP
特转载一高手总结PHP学习资源和链接.
Dec 05 PHP
php self,$this,const,static,-&amp;gt;的使用
Oct 22 PHP
PHP计划任务之关闭浏览器后仍然继续执行的函数
Jul 22 PHP
注意:php5.4删除了session_unregister函数
Aug 05 PHP
我整理的PHP 7.0主要新特性
Jan 07 PHP
Yii2中多表关联查询hasOne hasMany的方法
Feb 15 PHP
PHP如何读取由JavaScript设置的Cookie
Mar 22 PHP
利用PHP访问MySql数据库的逻辑操作以及增删改查的实例讲解
Aug 30 PHP
PHP实现微信申请退款功能
Oct 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/12/06 PHP
MySql 按时间段查询数据方法(实例说明)
2008/11/02 PHP
简单的php 验证图片生成函数
2009/05/21 PHP
基于php常用函数总结(数组,字符串,时间,文件操作)
2013/06/27 PHP
php创建、获取cookie及基础要点分析
2015/01/26 PHP
php计算指定目录下文件占用空间的方法
2015/03/13 PHP
PHP实现的简单缓存类
2015/07/29 PHP
php中的抽象方法和抽象类
2017/02/14 PHP
thinkPHP5实现的查询数据库并返回json数据实例
2017/10/23 PHP
JavaScript高级程序设计 读书笔记之九 本地对象Array
2012/02/27 Javascript
中国地区三级联动下拉菜单效果分析
2012/11/15 Javascript
关闭ie窗口清除Session的解决方法
2014/01/10 Javascript
JS判断、校验MAC地址的2个实例
2014/05/05 Javascript
jQuery实现的类似淘宝网站搜索框样式代码分享
2015/08/24 Javascript
js图片上传前预览功能(兼容所有浏览器)
2016/08/24 Javascript
使用Ajax生成的Excel文件并下载的实例
2016/11/21 Javascript
微信公众平台开发教程(六)获取个性二维码的实例
2016/12/02 Javascript
基于JS脚本语言的基础语法详解
2017/07/22 Javascript
对vux点击事件的优化详解
2018/08/28 Javascript
详解Angular Forms中自定义ngModel绑定值的方式
2018/12/10 Javascript
html+jQuery实现拖动滑块图片拼图验证码插件【移动端适用】
2019/09/10 jQuery
python实现连接mongodb的方法
2015/05/08 Python
Python备份目录及目录下的全部内容的实现方法
2016/06/12 Python
Python使用asyncio包处理并发详解
2017/09/09 Python
python多进程中的内存复制(实例讲解)
2018/01/05 Python
python 通过xml获取测试节点和属性的实例
2018/03/31 Python
Python3实现爬虫爬取赶集网列表功能【基于request和BeautifulSoup模块】
2018/12/05 Python
Django ManyToManyField 跨越中间表查询的方法
2018/12/18 Python
关于python导入模块import与常见的模块详解
2019/08/28 Python
Python matplotlib画图时图例说明(legend)放到图像外侧详解
2020/05/16 Python
安装并免费使用Pycharm专业版(学生/教师)
2020/09/24 Python
音乐教学随笔感言
2014/02/19 职场文书
物理课外活动总结
2014/08/27 职场文书
中学生检讨书范文
2014/11/03 职场文书
教师岗位职责
2015/02/03 职场文书
生命的关键成分来自太空?陨石说是的
2022/04/29 数码科技