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开发者事半功倍的十大技巧小结
Apr 20 PHP
PHP取进制余数函数代码
Jan 19 PHP
如何使用FireFox插件FirePHP调试PHP
Jul 23 PHP
php解压文件代码实现php在线解压
Feb 13 PHP
jquery+php+ajax显示上传进度的多图片上传并生成缩略图代码
Oct 15 PHP
PHP解析目录路径的3个函数总结
Nov 18 PHP
PHP多维数组转一维数组的简单实现方法
Dec 23 PHP
PHP 5.6.11中CURL模块问题的解决方法
Aug 08 PHP
弹出模态框modal的实现方法及实例
Sep 19 PHP
php如何把表单内容提交到数据库
Jul 08 PHP
TP5框架使用QueryList采集框架爬小说操作示例
Mar 26 PHP
ThinkPHP5.1的权限控制怎么写?分享一个AUTH权限控制
Mar 09 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会员权限控制实现原理分析
2011/05/29 PHP
php.ini修改php上传文件大小限制的方法详解
2013/06/17 PHP
php获取网页标题和内容函数(不包含html标签)
2014/02/03 PHP
php实现设计模式中的单例模式详解
2014/10/11 PHP
完整删除ecshop中获取店铺信息的API
2014/12/24 PHP
实例讲解PHP页面静态化
2018/02/05 PHP
js 3种归并操作的实例代码
2013/10/30 Javascript
javascipt:filter过滤介绍及使用
2014/09/10 Javascript
jQuery Mobile弹出窗、弹出层知识汇总
2016/01/05 Javascript
JS正则表达式验证中文字符
2017/05/08 Javascript
利用vueJs实现图片轮播实例代码
2017/06/03 Javascript
webpack将js打包后的map文件详解
2018/02/22 Javascript
微信小程序如何获取手机验证码
2018/11/04 Javascript
详解微信小程序回到顶部的两种方式
2019/05/09 Javascript
基于Vue和Element-Ui搭建项目的方法
2019/09/06 Javascript
python筛选出两个文件中重复行的方法
2018/05/31 Python
python 列表中[ ]中冒号‘:’的作用
2019/04/30 Python
Python 3.8中实现functools.cached_property功能
2019/05/29 Python
python使用opencv对图像mask处理的方法
2019/07/05 Python
浅谈Django中的QueryDict元素为数组的坑
2020/03/31 Python
Python配置pip国内镜像源的实现
2020/08/20 Python
Html5新增标签有哪些
2017/04/13 HTML / CSS
JSP&Servlet技术面试题
2015/05/21 面试题
县级文明单位申报材料
2014/05/23 职场文书
商务英语专业求职信
2014/06/26 职场文书
群众路线学习心得体会范文
2014/11/05 职场文书
2014教师评职称工作总结
2014/11/10 职场文书
大学生毕业评语
2014/12/31 职场文书
出生证明格式
2015/06/15 职场文书
小公司融资,商业计划书的8切记
2019/07/15 职场文书
创业计划书之游泳馆
2019/09/16 职场文书
Mysql中存储引擎的区别及比较
2021/06/04 MySQL
详细了解MVC+proxy
2021/07/09 Java/Android
CSS实现五种常用的2D转换
2021/12/06 HTML / CSS
tomcat的catalina.out日志按自定义时间格式进行分割的操作方法
2022/04/02 Servers
MySQL GTID复制的具体使用
2022/05/20 MySQL