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 相关文章推荐
第十二节 类的自动加载 [12]
Oct 09 PHP
十天学会php之第八天
Oct 09 PHP
《PHP边学边教》(02.Apache+PHP环境配置――下篇)
Dec 13 PHP
php中计算程序运行时间的类代码
Nov 03 PHP
php实现批量下载百度云盘文件例子分享
Apr 10 PHP
php计算程序运行时间的简单例子分享
May 10 PHP
php中opendir函数用法实例
Nov 15 PHP
php实现仿写CodeIgniter的购物车类
Jul 29 PHP
PHP测试成功的邮件发送案例
Oct 26 PHP
php compact 通过变量创建数组
Nov 15 PHP
php爬取天猫和淘宝商品数据
Feb 23 PHP
laravel 执行迁移回滚示例
Oct 23 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
德生PL990的分析评价
2021/03/02 无线电
PHP中str_replace函数使用小结
2008/10/11 PHP
php的一些小问题
2010/07/03 PHP
PHP反射使用实例和PHP反射API的中文说明
2014/07/02 PHP
PHP文件缓存smarty模板应用实例分析
2016/02/26 PHP
PHP仿微信多图片预览上传实例代码
2016/09/13 PHP
php实现姓名根据首字母排序的类与方法(实例代码)
2018/05/16 PHP
读jQuery之七 判断点击了鼠标哪个键的代码
2011/06/21 Javascript
nodeJS代码实现计算交社保是否合适
2015/03/09 NodeJs
在JavaScript中使用JSON数据
2016/02/15 Javascript
JS简单实现点击复制链接的方法
2016/08/03 Javascript
JS实现淡入淡出图片效果的方法分析
2016/12/20 Javascript
详解Angular.js指令中scope类型的几种特殊情况
2017/02/21 Javascript
Vue组件内部实现一个双向数据绑定的实例代码
2019/04/04 Javascript
JavaScript组合设计模式--改进引入案例分析
2020/05/23 Javascript
[02:30]DOTA2英雄基础教程 暗影恶魔
2013/12/17 DOTA
[51:53]完美世界DOTA2联赛决赛日 Inki vs LBZS 第二场 11.08
2020/11/10 DOTA
python获取元素在数组中索引号的方法
2015/07/15 Python
Python ldap实现登录实例代码
2016/09/30 Python
Python实现的圆形绘制(画圆)示例
2018/01/31 Python
python生成每日报表数据(Excel)并邮件发送的实例
2019/02/03 Python
flask实现验证码并验证功能
2019/12/05 Python
使用Python实现分别输出每个数组
2019/12/06 Python
使用Python发现隐藏的wifi
2020/03/04 Python
详解Html5页面实现下载文件(apk、txt等)的三种方式
2018/10/22 HTML / CSS
捷克移动配件网上商店:ProMobily.cz
2019/03/15 全球购物
安德玛加拿大官网:Under Armour加拿大
2019/10/02 全球购物
小学生自我鉴定
2013/10/12 职场文书
信访工作者先进事迹
2014/01/17 职场文书
银行金融服务方案
2014/06/11 职场文书
教育实践活动对照检查材料
2014/09/23 职场文书
收款授权委托书
2014/10/02 职场文书
2016年学校“6﹒26国际禁毒日”宣传活动总结
2016/04/05 职场文书
教你利用python实现企业微信发送消息
2021/05/23 Python
关于CSS浮动与取消浮动的问题
2021/06/28 HTML / CSS
kubernetes集群搭建Zabbix监控平台的详细过程
2022/07/07 Servers