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和XSS跨站攻击的防范
Apr 17 PHP
PHP内核介绍及扩展开发指南―基础知识
Sep 11 PHP
php jquery 多文件上传简单实例
Dec 23 PHP
PHP实现检测客户端是否使用代理服务器及其匿名级别
Jan 07 PHP
[原创]php获取数组中键值最大数组项的索引值
Mar 17 PHP
yii,CI,yaf框架+smarty模板使用方法
Dec 29 PHP
php支持断点续传、分块下载的类
May 02 PHP
详谈PHP中的密码安全性Password Hashing
Feb 04 PHP
php unicode编码和字符串互转的方法
Aug 12 PHP
详解PHP实现支付宝小程序用户授权的工具类
Dec 25 PHP
php面试实现反射注入的详细方法
Sep 30 PHP
aec加密 php_php aes加密解密类(兼容php5、php7)
Mar 14 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验证是否是md5编码的简单代码
2014/04/01 PHP
Codeigniter出现错误提示Error with CACHE directory的解决方案
2014/06/12 PHP
php远程下载类分享
2016/04/13 PHP
PHP入门教程之使用Mysqli操作数据库的方法(连接,查询,事务回滚等)
2016/09/11 PHP
PHP单例模式简单用法示例
2017/06/23 PHP
javascript fullscreen全屏实现代码
2009/04/09 Javascript
妙用Jquery的val()方法
2012/06/27 Javascript
Javascript 检测键盘按键信息及键码值对应介绍
2013/01/03 Javascript
window.requestAnimationFrame是什么意思,怎么用
2013/01/13 Javascript
javascript ready和load事件的区别示例介绍
2013/08/30 Javascript
jquery中的过滤操作详细解析
2013/12/02 Javascript
浏览器窗口加载和大小改变事件示例
2014/02/27 Javascript
jQuery过滤选择器用法分析
2015/02/10 Javascript
Vue.js每天必学之构造器与生命周期
2016/09/05 Javascript
浅谈js script标签中的预解析
2016/12/30 Javascript
JS实现简单短信验证码界面
2017/08/07 Javascript
Jquery的Ajax技术使用方法
2019/01/21 jQuery
详解React项目中碰到的IE问题
2019/03/14 Javascript
微信小程序实现渐入渐出动画效果
2019/06/13 Javascript
JS 封装父页面子页面交互接口的实例代码
2019/06/25 Javascript
python用来获得图片exif信息的库实例分析
2015/03/16 Python
python读取与写入csv格式文件的示例代码
2017/12/16 Python
python通过移动端访问查看电脑界面
2020/01/06 Python
Python实现计算图像RGB均值方式
2020/06/04 Python
网购亚洲时装、美容产品和生活百货:YesStyle
2016/09/15 全球购物
美国女孩服装购物网站:Justice
2017/03/04 全球购物
英国领先的票务代理商之一:The Ticket Factory
2019/02/09 全球购物
数据库什么时候应该被重组
2012/11/02 面试题
团工委书记自荐书范文
2013/12/17 职场文书
关于毕业的中学校园广播稿
2014/01/26 职场文书
泸县召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
王金山在党的群众路线教育实践活动总结大会上的讲话稿
2014/10/25 职场文书
会议主持词开场白
2015/05/28 职场文书
入党介绍人意见怎么写
2015/06/03 职场文书
同学会感言
2015/07/30 职场文书
详解JS ES6编码规范
2021/05/07 Javascript