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 获取远程网页内容的函数
Sep 08 PHP
PHP 命名空间实例说明
Jan 27 PHP
PHP中error_reporting()函数的用法(修改PHP屏蔽错误)
Jul 01 PHP
php array_filter除去数组中的空字符元素
Jun 21 PHP
php基础教程 php内置函数实例教程
Aug 21 PHP
利用php+mcDropdown实现文件路径可在下拉框选择
Aug 07 PHP
php获取服务器端mac和客户端mac的地址支持WIN/LINUX
May 15 PHP
php 使用file_get_contents读取大文件的方法
Nov 13 PHP
Windows2003下php5.4安装配置教程(Apache2.4)
Jun 30 PHP
PHP对象实例化单例方法
Jan 19 PHP
php7函数,声明,返回值等新特性介绍
May 25 PHP
Yii支持多域名cors原理的实现
Dec 05 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
mysql时区问题
2008/03/26 PHP
php横向重复区域显示二法
2008/09/25 PHP
PHP扩展Memcache分布式部署方案
2015/12/06 PHP
PHP获取表单数据与HTML嵌入PHP脚本的实现
2017/02/09 PHP
javascript 对表格的行和列都能加亮显示
2008/12/26 Javascript
js 页面关闭前的出现提示的实现代码
2011/05/25 Javascript
Jquery post传递数组方法实现思路及代码
2013/04/28 Javascript
Bootstrap每天必学之日期控制
2016/03/07 Javascript
JavaScript重载函数实例剖析
2016/05/13 Javascript
Bootstrap打造一个左侧折叠菜单的系统模板(二)
2016/05/17 Javascript
ng2学习笔记之bootstrap中的component使用教程
2017/03/09 Javascript
基于vue+ bootstrap实现图片上传图片展示功能
2017/05/17 Javascript
浅谈JavaScript中的属性:如何遍历属性
2017/09/14 Javascript
JS字符串去除连续或全部重复字符的实例
2018/03/08 Javascript
webpack+express实现文件精确缓存的示例代码
2020/06/11 Javascript
elementui实现预览图片组件二次封装
2020/12/29 Javascript
十个Python程序员易犯的错误
2015/12/15 Python
Mac中升级Python2.7到Python3.5步骤详解
2017/04/27 Python
python中实现精确的浮点数运算详解
2017/11/02 Python
PyQt4编程之让状态栏显示信息的方法
2019/06/18 Python
Flask框架实现的前端RSA加密与后端Python解密功能详解
2019/08/13 Python
python装饰器代替set get方法实例
2019/12/19 Python
40个你可能不知道的Python技巧附代码
2020/01/29 Python
Python @property原理解析和用法实例
2020/02/11 Python
Alba Moda瑞士网上商店:独家意大利时尚女装销售
2016/11/28 全球购物
Redbubble法国:由独立艺术家设计的独特产品
2019/01/08 全球购物
巴西最大的运动品牌:Olympikus
2020/07/14 全球购物
探亲邀请信范文
2014/01/30 职场文书
积极贯彻学习两会精神总结
2014/03/17 职场文书
单位委托书范本
2014/04/04 职场文书
技术负责人任命书
2014/06/05 职场文书
献爱心大型公益活动策划方案
2014/09/15 职场文书
放弃遗产继承公证书
2015/01/26 职场文书
奖学金申请个人主要事迹材料
2015/11/04 职场文书
SQL Server2019数据库之简单子查询的具有方法
2021/04/27 SQL Server
python关于集合的知识案例详解
2021/05/30 Python