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 mssql 日期出现中文字符的解决方法
Mar 10 PHP
php 删除记录同时删除图片文件的实现代码
May 12 PHP
php购物车实现代码
Oct 10 PHP
php重定向的三种方法分享
Feb 22 PHP
php表单请求获得数据求和示例
May 15 PHP
php正则替换处理HTML页面的方法
Jun 17 PHP
[原创]php实现子字符串位置相互对调互换的方法
Jun 02 PHP
PHP序列化操作方法分析
Sep 28 PHP
php实现HTML实体编号与非ASCII字符串相互转换类实例
Nov 02 PHP
PHP中单例模式与工厂模式详解
Feb 17 PHP
PHP实现mysqli批量执行多条语句的方法示例
Jul 22 PHP
PHP实现基于状态的责任链审批模式详解
May 31 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
Terran历史背景
2020/03/14 星际争霸
php中实现记住密码自动登录的代码
2011/03/02 PHP
修改destoon会员公司的伪静态中的com目录的方法
2014/08/21 PHP
PHP Filter过滤器全面解析
2016/08/09 PHP
PHP 芝麻信用接入的注意事项
2016/12/01 PHP
User Scripts: Video Download by User Scripts
2007/05/14 Javascript
jQuery Deferred和Promise创建响应式应用程序详细介绍
2013/03/05 Javascript
jquery垂直公告滚动实现代码
2013/12/08 Javascript
jQuery简单实现遍历数组的方法
2015/04/14 Javascript
详解JavaScript的另类写法
2016/04/11 Javascript
Jquery获取当前城市的天气信息
2016/08/05 Javascript
Ionic2调用本地SQlite实例
2017/04/22 Javascript
Vue-cli proxyTable 解决开发环境的跨域问题详解
2017/05/18 Javascript
Vue中保存用户登录状态实例代码
2017/06/07 Javascript
Vue前后端不同端口的实现方法
2018/09/19 Javascript
ES10 特性的完整指南小结
2019/03/04 Javascript
vuex管理状态 刷新页面保持不被清空的解决方案
2019/11/11 Javascript
Element Backtop回到顶部的具体使用
2020/07/27 Javascript
JavaScript常用进制转换及位运算实例解析
2020/10/14 Javascript
numpy 对矩阵中Nan的处理:采用平均值的方法
2018/10/30 Python
Python with用法:自动关闭文件进程
2019/07/10 Python
python实现ip地址查询经纬度定位详解
2019/08/30 Python
numpy:np.newaxis 实现将行向量转换成列向量
2019/11/30 Python
python如何实现复制目录到指定目录
2020/02/13 Python
Python发起请求提示UnicodeEncodeError错误代码解决方法
2020/04/21 Python
详解python tkinter 图片插入问题
2020/09/03 Python
Python 操作SQLite数据库的示例
2020/10/16 Python
HTML5图片预览实例分享
2014/06/04 HTML / CSS
德国最大的拼图在线商店:Puzzle.de
2016/12/17 全球购物
阿拉伯时尚购物网站:Nisnass
2021/02/07 全球购物
小学一年级评语大全
2014/04/22 职场文书
海南召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
不尊敬老师检讨书范文
2014/11/19 职场文书
模范班主任事迹材料
2014/12/17 职场文书
五星级酒店前台接待岗位职责
2015/04/02 职场文书
2016年师德学习心得体会
2016/01/12 职场文书