访问者模式 php,php设计模式 Visitor 访问者模式
/**
* 访问者模式
*
* 表示一个作用于某对象结构中的各元素的操作,可以在不改变各元素的类的前提下定义作用于这些元素的新操作
*
*/
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 访问者模式相关推荐
- 设计模式——Visitor(访问者)模式
目录 前言 1 定义 2 适用性 3 结构 3.1 结构图 3.2 参与者 4 Java实际应用举例--以ASM技术为例 4.1 被访问对象--ClassReader 4.2 Visitor--Cla ...
- 模式的模式:从设计模式到元模式
最近的一两个月里,我一直在研究各类的模式:设计模式.架构模式.容器模式,以及其它一些特定领域的模式(如并行计算模式)等等. 经历了一番买书.读论文.读代码,我发现了以前对于模式的理解不够深刻.也因此呢 ...
- android常用的工厂模式,Android的设计模式-简单工厂模式
前言 Android的设计模式系列文章介绍,欢迎关注,持续更新中:java 1.定义 定义一个用于建立对象的接口,让子类决定实例化哪一个类.设计模式 2.介绍 简单工厂模式属于建立型模式. 简单工厂模 ...
- android 状态模式,Android编程设计模式之状态模式详解
本文实例讲述了Android编程设计模式之状态模式.分享给大家供大家参考,具体如下: 一.介绍 状态模式中的行为是由状态来决定的,不同的状态下有不同的行为.状态模式和策略模式的结构几乎完全一样,但它们 ...
- 建造者模式 php,PHP设计模式之建造者模式定义与用法简单示例
本文实例讲述了PHP设计模式之建造者模式.分享给大家供大家参考,具体如下: 建造者模式: 将复杂对象的创建过程和表示进行分离(好吧,我也看不懂什么意思1). 来点我人类能听懂的话: 1.在客户端看来需 ...
- 设计模式之外观模式php,PHP设计模式:外观模式
前言 菜鸟教程对外观模式的描述是:外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口.这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口, ...
- python文件合法模式组合_python设计模式之组合模式
最开始接触组合设计模式是在大话设计模式这本书中的案例,讲的是让你设计一个公司的组织架构,一个总公司下有人力资源部门,IT部门, 财务部门,还有广州分公司.深圳分公司,在分公司下也有IT部门和财务部门, ...
- 设计模式 原型模式_创新设计模式:原型模式
设计模式 原型模式 原型模式用于创建对象的副本. 这种模式非常有用,特别是当从头开始创建对象的成本很高时. 与builder , factory和abstract factory模式相比,它不会从头开 ...
- java工厂模式 uml_深入浅出设计模式-简单工厂模式
模式定义 简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式定义了一个创建对象的类,由这个类来封装实例化 ...
最新文章
- 黑客之王!韩国神童登顶黑客界的“极限挑战”
- [环境]Mac Homebrew自动安装
- mybatis-spring 项目简介
- python,制作山东省的地图 热力图
- Nginx log error:client sent invalid userid cookie
- zip 密码算法 java,java zip 密码
- 微信小程序开发打开另一个小程序的实现方法
- 希望不要T我~~哈哈...
- 每个人都在谈论硒替代品-明智地选择!
- IT:银行类金融科技岗笔试习题集合—四个模块包括【综合知识+EPI+英语+个性测评】持续更新,建议收藏
- WIFI接口定义知识介绍
- RL(Chapter 4): Gambler’s Problem
- 零基础学习人工智能如何入门?
- ps如何切html用的图片,前端实战(一)-----用ps把PSD切成HTML能用的图片
- arcmap fishnet 经纬度
- Laravel + Laragon 搭建php项目
- 同学录退出了历史舞台了吗?
- Python案例之QQ空间自动登录程序实现
- 从 Git 提交中删除文件
- 最短路迪杰斯特拉回炉重造