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 相关文章推荐
用cookies来跟踪识别用户
Oct 09 PHP
用sql命令修改数据表中的一个字段为非空(not null)的语句
Jun 04 PHP
使用php实现截取指定长度
Aug 06 PHP
php后门URL的防范
Nov 12 PHP
PHP的变量类型和作用域详解
Mar 12 PHP
php通过session防url攻击方法
Dec 10 PHP
php检查字符串中是否有外链的方法
Jul 29 PHP
实例简介PHP的一些高级面向对象编程的特性
Nov 27 PHP
yii2超好用的日期组件和时间组件
May 05 PHP
POST一个JSON格式的数据给Restful服务实例详解
Apr 07 PHP
Windows平台PHP+IECapt实现网页批量截图并创建缩略图功能详解
Aug 02 PHP
PHP中通过getopt解析GNU C风格命令行选项
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
php使用百度ping服务代码实例
2014/06/19 PHP
php 实现一个字符串加密解密的函数实例代码
2016/11/01 PHP
javascript下function声明一些小结
2007/12/28 Javascript
js hover 定时器(实例代码)
2013/11/12 Javascript
JS辨别访问浏览器判断是android还是ios系统
2014/08/19 Javascript
js解决select下拉选不中问题
2014/10/14 Javascript
纯JavaScript实现获取onclick、onchange等事件的值
2014/12/29 Javascript
js操作cookie保存浏览记录的方法
2015/12/25 Javascript
如何使用jquery修改css中带有!important的样式属性
2016/04/28 Javascript
JS作用域闭包、预解释和this关键字综合实例解析
2016/12/16 Javascript
JS运动特效之同时运动实现方法分析
2018/01/24 Javascript
使用D3.js创建物流地图的示例代码
2018/01/27 Javascript
vux uploader 图片上传组件的安装使用方法
2018/05/15 Javascript
angularjs手动识别字符串中的换行符方法
2018/10/02 Javascript
详解如何解决vue开发请求数据跨域的问题(基于浏览器的配置解决)
2018/11/12 Javascript
JavaScript实现多张图片放大镜效果示例【不限定图片尺寸,rem单位】
2019/05/14 Javascript
微信小程序常用的3种提示弹窗实现详解
2019/09/19 Javascript
JavaScript实现PC端四格密码输入框功能
2020/02/19 Javascript
vue render函数动态加载img的src路径操作
2020/10/26 Javascript
基于JavaScript实现轮播图效果
2021/01/02 Javascript
[01:18:21]EG vs TNC Supermajor小组赛B组败者组第一轮 BO3 第一场 6.2
2018/06/03 DOTA
python求pi的方法
2014/10/08 Python
Django框架组成结构、基本概念与文件功能分析
2019/07/30 Python
python3 dict ndarray 存成json,并保留原数据精度的实例
2019/12/06 Python
pandas和spark dataframe互相转换实例详解
2020/02/18 Python
Python装饰器的应用场景代码总结
2020/04/10 Python
eDreams澳大利亚:预订机票、酒店和度假产品
2017/04/19 全球购物
美国背景检查、公共记录和人物搜索网站:BeenVerified
2018/02/25 全球购物
如何利用cmp命令比较文件
2016/04/11 面试题
教学个人的自我评价分享
2014/02/16 职场文书
社区春季防火方案
2014/06/02 职场文书
护理学专业求职信
2014/06/29 职场文书
2015年教学工作总结
2015/04/02 职场文书
傲慢与偏见电影观后感
2015/06/10 职场文书
十大冰系宝可梦排名,颜值最高的阿罗拉九尾,第三使用率第一
2022/03/18 日漫
Win11使用CAD卡顿或者致命错误怎么办?Win11无法正常使用CAD的解决方法
2022/07/23 数码科技