php设计模式 Visitor 访问者模式
作者:bea
代码如下: <?php /** * 访问者模式 * * 表示一个作用于某对象结构中的各元素的操作,可以在不改变各元素的类的前提下定义作用于这些元素的新操作 * */ abstract class Visitor { abstract public function visitCroncreteElementA($element); abstract public function visitCroncreteElementB($element);
代码如下:
<?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和Mysqlweb应用开发核心技术-第1部分 Php基础-2 php语言介绍
- PHP和Mysqlweb应用开发核心技术 第1部分 Php基础-1 开始了解php
- PHP的范围解析操作符(::)的含义分析说明
- 一个基于PDO的数据库操作类(新) 一个PDO事务实例
- PHP array_multisort()函数的使用札记
- PHP导出MySQL数据到Excel文件(fputcsv)
- PHP include_path设置技巧分享
- php array_intersect比array_diff快(附详细的使用说明)
- php header Content-Type类型小结
- php中关于codeigniter的xmlrpc的类在进行数据交换时的类型问题
- PHP采集利器 Snoopy 试用心得
- php中的三元运算符使用说明
- PHP 数据结构 算法 三元组 Triplet
- php中批量删除Mysql中相同前缀的数据表的代码
- PHP中error_reporting()函数的用法(修改PHP屏蔽错误)
- PHP函数之error_reporting(E_ALL ^ E_NOTICE)详细说明
- 在php中判断一个请求是ajax请求还是普通请求的方法
- php编程实现获取excel文档内容的代码实例
- PHP学习笔记之数组篇