/**

* 访问者模式

*

* 表示一个作用于某对象结构中的各元素的操作,可以在不改变各元素的类的前提下定义作用于这些元素的新操作

*

*/

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
";

}

public function visitCroncreteElementB($element)

{

echo get_class($element)." visit 1B
";

}

}

class ConcreteVisitor2 extends Visitor

{

public function visitCroncreteElementA($element)

{

echo get_class($element)." visit 2A
";

}

public function visitCroncreteElementB($element)

{

echo get_class($element)." visit 2B
";

}

}

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设计模式 Visitor 访问者模式相关推荐

  1. 设计模式——Visitor(访问者)模式

    目录 前言 1 定义 2 适用性 3 结构 3.1 结构图 3.2 参与者 4 Java实际应用举例--以ASM技术为例 4.1 被访问对象--ClassReader 4.2 Visitor--Cla ...

  2. 模式的模式:从设计模式到元模式

    最近的一两个月里,我一直在研究各类的模式:设计模式.架构模式.容器模式,以及其它一些特定领域的模式(如并行计算模式)等等. 经历了一番买书.读论文.读代码,我发现了以前对于模式的理解不够深刻.也因此呢 ...

  3. android常用的工厂模式,Android的设计模式-简单工厂模式

    前言 Android的设计模式系列文章介绍,欢迎关注,持续更新中:java 1.定义 定义一个用于建立对象的接口,让子类决定实例化哪一个类.设计模式 2.介绍 简单工厂模式属于建立型模式. 简单工厂模 ...

  4. android 状态模式,Android编程设计模式之状态模式详解

    本文实例讲述了Android编程设计模式之状态模式.分享给大家供大家参考,具体如下: 一.介绍 状态模式中的行为是由状态来决定的,不同的状态下有不同的行为.状态模式和策略模式的结构几乎完全一样,但它们 ...

  5. 建造者模式 php,PHP设计模式之建造者模式定义与用法简单示例

    本文实例讲述了PHP设计模式之建造者模式.分享给大家供大家参考,具体如下: 建造者模式: 将复杂对象的创建过程和表示进行分离(好吧,我也看不懂什么意思1). 来点我人类能听懂的话: 1.在客户端看来需 ...

  6. 设计模式之外观模式php,PHP设计模式:外观模式

    前言 菜鸟教程对外观模式的描述是:外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口.这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口, ...

  7. python文件合法模式组合_python设计模式之组合模式

    最开始接触组合设计模式是在大话设计模式这本书中的案例,讲的是让你设计一个公司的组织架构,一个总公司下有人力资源部门,IT部门, 财务部门,还有广州分公司.深圳分公司,在分公司下也有IT部门和财务部门, ...

  8. 设计模式 原型模式_创新设计模式:原型模式

    设计模式 原型模式 原型模式用于创建对象的副本. 这种模式非常有用,特别是当从头开始创建对象的成本很高时. 与builder , factory和abstract factory模式相比,它不会从头开 ...

  9. java工厂模式 uml_深入浅出设计模式-简单工厂模式

    模式定义 简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式定义了一个创建对象的类,由这个类来封装实例化 ...

最新文章

  1. 黑客之王!韩国神童登顶黑客界的“极限挑战”
  2. [环境]Mac Homebrew自动安装
  3. mybatis-spring 项目简介
  4. python,制作山东省的地图 热力图
  5. Nginx log error:client sent invalid userid cookie
  6. zip 密码算法 java,java zip 密码
  7. 微信小程序开发打开另一个小程序的实现方法
  8. 希望不要T我~~哈哈...
  9. 每个人都在谈论硒替代品-明智地选择!
  10. IT:银行类金融科技岗笔试习题集合—四个模块包括【综合知识+EPI+英语+个性测评】持续更新,建议收藏
  11. WIFI接口定义知识介绍
  12. RL(Chapter 4): Gambler’s Problem
  13. 零基础学习人工智能如何入门?
  14. ps如何切html用的图片,前端实战(一)-----用ps把PSD切成HTML能用的图片
  15. arcmap fishnet 经纬度
  16. Laravel + Laragon 搭建php项目
  17. 同学录退出了历史舞台了吗?
  18. Python案例之QQ空间自动登录程序实现
  19. 从 Git 提交中删除文件
  20. 最短路迪杰斯特拉回炉重造

热门文章

  1. fatal error C1001的一个解决心得
  2. 在C语言中以编程的方式获取函数名
  3. IE 中释放javascript对象
  4. ASP.NET 26个常用性能优化方法
  5. struts2采用convention-plugin实现零配置
  6. 32位x86处理器编程导入——《x86汇编语言:从实模式到保护模式》读书笔记08
  7. Hi3516A开发--常用指令和根文件目录详解
  8. Tensorflow学习笔记——word2vec
  9. Android L Settings 简要分析
  10. es创建索引库,无法使用InetSocketTransportAddress