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 adodb连接不同数据库
Mar 19 PHP
php学习笔记 类的声明与对象实例化
Jun 13 PHP
PHP的SQL注入过程分析
Jan 06 PHP
PHPEXCEL 使用小记
Jan 06 PHP
使用php 获取时间今天明天昨天时间戳的详解
Jun 20 PHP
php实现查询百度google收录情况(示例代码)
Aug 02 PHP
thinkphp模板用法和内容输出实例
Nov 28 PHP
PHP获取当前相对于域名目录的方法
Jun 26 PHP
PHP中余数、取余的妙用
Jun 29 PHP
php计算年龄精准到年月日
Nov 17 PHP
PHP Try-catch 语句使用技巧
Feb 28 PHP
php-beanstalkd消息队列类实例分享
Jul 19 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 XML error parsing SOAP payload on line 1
2010/06/17 PHP
PHP setcookie设置Cookie用法(及设置无效的问题)
2011/07/13 PHP
php漏洞之跨网站请求伪造与防止伪造方法
2013/08/15 PHP
php获取从百度搜索进入网站的关键词的详细代码
2014/01/08 PHP
jquery用get实现ajax在ie里面刷新不进入后台解决方法
2013/08/12 Javascript
html文件中jquery与velocity变量中的$冲突的解决方法
2013/11/01 Javascript
instanceof和typeof运算符的区别详解
2014/01/06 Javascript
javascript制作幻灯片(360度全景图片)
2015/07/28 Javascript
JavaScript笔记之数据属性和存储器属性
2016/03/31 Javascript
JQuery查找子元素find()和遍历集合each的方法总结
2017/03/07 Javascript
使用Math.max,Math.min获取数组中的最值实例
2017/04/25 Javascript
Webpack打包css后z-index被重新计算的解决方法
2017/06/18 Javascript
Three.js利用Detector.js插件如何实现兼容性检测详解
2017/09/26 Javascript
前端MVVM框架解析之双向绑定
2018/01/24 Javascript
基于Vue实现拖拽效果
2018/04/27 Javascript
JS 使用 window对象的print方法实现分页打印功能
2018/05/16 Javascript
Vue 实现显示/隐藏层的思路(加全局点击事件)
2019/12/31 Javascript
node.js中module模块的功能理解与用法实例分析
2020/02/14 Javascript
[04:52]第二届DOTA2亚洲邀请赛主赛事第一天比赛集锦:OG娜迦海妖放大配合谜团大中3人
2017/04/02 DOTA
零基础写python爬虫之使用Scrapy框架编写爬虫
2014/11/07 Python
Python Queue模块详解
2014/11/30 Python
Python函数的周期性执行实现方法
2016/08/13 Python
Python中asyncio与aiohttp入门教程
2018/10/16 Python
python实现输入的数据在地图上生成热力图效果
2019/12/06 Python
python实现快递价格查询系统
2020/03/03 Python
python读取配置文件方式(ini、yaml、xml)
2020/04/09 Python
全球最大的生存食品、水和装备专用在线市场:BePrepared.com
2020/01/02 全球购物
劳资员岗位职责
2013/11/11 职场文书
对祖国的寄语大全
2014/04/11 职场文书
工程材料采购方案
2014/05/18 职场文书
高中校园广播稿
2014/10/21 职场文书
优秀共青团员事迹材料
2014/12/25 职场文书
法律意见书范文
2015/06/04 职场文书
python获取淘宝服务器时间的代码示例
2021/04/22 Python
关于Oracle12C默认用户名system密码不正确的解决方案
2021/10/16 Oracle
keepalived + nginx 实现高可用方案
2022/12/24 Servers