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 相关文章推荐
用文本作数据处理
Oct 09 PHP
php类
Nov 27 PHP
php 服务器调试 Zend Debugger 的安装教程
Sep 25 PHP
PHP之数组学习
May 29 PHP
JpGraph php柱状图使用介绍
Aug 23 PHP
ThinkPHP写第一个模块应用
Feb 20 PHP
关于svn冲突的解决方法
Jun 21 PHP
Codeigniter购物车类不能添加中文的解决方法
Nov 29 PHP
php下载文件超时时间的设置方法
Oct 06 PHP
ThinkPHP实现附件上传功能
Apr 27 PHP
PHP上传文件及图片到七牛的方法
Jul 25 PHP
如何通过Apache在本地配置多个虚拟主机
Jul 29 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的单引号和双引号 字符串效率
2009/05/27 PHP
php获取指定(访客)IP所有信息(地址、邮政编码、国家、经纬度等)的方法
2015/07/06 PHP
多个Laravel项目如何共用migrations详解
2018/09/25 PHP
图片自动缩小的js代码,用以防止图片撑破页面
2007/03/12 Javascript
javascript学习基础笔记之DOM对象操作
2011/11/03 Javascript
使用GruntJS链接与压缩多个JavaScript文件过程详解
2013/08/02 Javascript
JavaScript实现同步于本地时间的动态时间显示方法
2015/02/02 Javascript
JavaScript返回网页中锚点数目的方法
2015/04/03 Javascript
onmouseover事件和onmouseout事件全面理解
2016/08/15 Javascript
js表单登陆验证示例
2016/10/19 Javascript
JQuery中Ajax的操作完整例子
2017/03/07 Javascript
AngularJS实现注册表单验证功能
2017/10/16 Javascript
浅谈Vue-cli 命令行工具分析
2017/11/22 Javascript
浅谈webpack对样式的处理
2018/01/05 Javascript
vue element项目引入icon图标的方法
2018/06/06 Javascript
代码整洁之道(重构)
2018/10/25 Javascript
用js编写留言板
2020/03/17 Javascript
python抓取网页图片并放到指定文件夹
2014/04/24 Python
使用python检测主机存活端口及检查存活主机
2015/10/12 Python
Python首次安装后运行报错(0xc000007b)的解决方法
2016/10/18 Python
python中logging库的使用总结
2017/10/18 Python
Python实现图片滑动式验证识别方法
2017/11/09 Python
Flask Web开发入门之文件上传(八)
2018/08/17 Python
在Python中增加和插入元素的示例
2018/11/01 Python
python单例模式的多种实现方法
2019/07/26 Python
在python shell中运行python文件的实现
2019/12/21 Python
有关Tensorflow梯度下降常用的优化方法分享
2020/02/04 Python
详解Python3 定义一个跨越多行的字符串的多种方法
2020/09/06 Python
python list等分并从等分的子集中随机选取一个数
2020/11/16 Python
Perfume’s Club法国站:购买香水和化妆品
2019/05/02 全球购物
李敖北大演讲稿
2014/05/24 职场文书
小学生志愿者活动方案
2014/08/23 职场文书
质量主管工作职责
2014/09/26 职场文书
历史博物馆观后感
2015/06/05 职场文书
《中彩那天》教学反思
2016/02/24 职场文书
python开发飞机大战游戏
2021/07/15 Python