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 相关文章推荐
玩转图像函数库―常见图形操作
Sep 03 PHP
phpBB BBcode处理的漏洞
Oct 09 PHP
配置最新的PHP加MYSQL服务器
Oct 09 PHP
php 更新数据库中断的解决方法
Jun 05 PHP
php MsSql server时遇到的中文编码问题
Jun 11 PHP
解析php通过cookies获取远程网页的指定代码
Jun 25 PHP
php获取汉字首字母的函数
Nov 07 PHP
PHP多进程编程实例
Oct 15 PHP
详解PHP用substr函数截取字符串中的某部分
Dec 03 PHP
PHP编程 SSO详细介绍及简单实例
Jan 13 PHP
Yii框架实现图片上传的方法详解
May 20 PHP
php利用云片网实现短信验证码功能的示例代码
Nov 18 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/09/03 PHP
给apache2.2加上mod_encoding模块後 php5.2.0 处理url出现bug
2007/04/12 PHP
PHP 加密/解密函数 dencrypt(动态密文,带压缩功能,支持中文)
2009/01/30 PHP
Discuz 模板语句分析及知识技巧
2009/08/21 PHP
php下载文件源代码(强制任意文件格式下载)
2014/05/09 PHP
php+mysql查询实现无限下级分类树输出示例
2016/10/03 PHP
PHPstorm快捷键(分享)
2017/07/17 PHP
Javascript开发包大全整理
2006/12/22 Javascript
jQuery easyui datagrid动态查询数据实例讲解
2013/02/26 Javascript
JavaScript中instanceof运算符的用法总结
2013/11/19 Javascript
javascript插件开发的一些感想和心得
2016/02/28 Javascript
JSONP和批量操作功能的实现方法
2016/08/21 Javascript
浅谈jquery.form.js的ajaxSubmit和ajaxForm的使用
2016/09/09 Javascript
Javascript 创建类并动态添加属性及方法的简单实现
2016/10/20 Javascript
jQuery特殊符号转义的实现
2016/11/30 Javascript
Node.js websocket使用socket.io库实现实时聊天室
2017/02/20 Javascript
Bootstrap入门教程一Hello Bootstrap初识
2017/03/02 Javascript
webpack4 从零学习常用配置(小结)
2019/05/28 Javascript
原生js实现表格翻页和跳转
2020/09/29 Javascript
python模拟事件触发机制详解
2018/01/19 Python
python实现拓扑排序的基本教程
2018/03/11 Python
pycharm 将django中多个app放到同个文件夹apps的处理方法
2018/05/30 Python
Python实现二叉树前序、中序、后序及层次遍历示例代码
2019/05/18 Python
pandas.DataFrame的pivot()和unstack()实现行转列
2019/07/06 Python
详解matplotlib中pyplot和面向对象两种绘图模式之间的关系
2021/01/22 Python
Python爬虫爬取ts碎片视频+验证码登录功能
2021/02/22 Python
西班牙自行车和跑步商店:Alltricks
2018/07/07 全球购物
来自世界上最好大学的在线课程:edX
2018/10/16 全球购物
彪马土耳其官网:PUMA土耳其
2019/07/14 全球购物
No7 Beauty美国官网:英国国民护肤品牌
2019/10/31 全球购物
护士自荐信范文
2013/12/15 职场文书
财务支持类个人的自我评价
2014/02/14 职场文书
库房保管员岗位职责
2014/04/07 职场文书
2015年政协委员工作总结
2015/05/20 职场文书
剑指Offer之Java算法习题精讲二叉树专项训练
2022/03/21 Java/Android
SpringBoot2零基础到精通之异常处理与web原生组件注入
2022/03/22 Java/Android