php设计模式 Visitor 访问者模式

复制代码 代码如下:
<?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);

时间: 2024-09-26 16:27:11

php设计模式 Visitor 访问者模式的相关文章

php设计模式 Visitor 访问者模式_php技巧

复制代码 代码如下: <?php /** * 访问者模式 * * 表示一个作用于某对象结构中的各元素的操作,可以在不改变各元素的类的前提下定义作用于这些元素的新操作 * */ abstract class Visitor { abstract public function visitCroncreteElementA($element); abstract public function visitCroncreteElementB($element); } class ConcreteVis

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

原文:乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)[索引页][源码下载] 乐在其中设计模式(C#) - 访问者模式(Visitor Pattern) 作者:webabcd 介绍 表示一个作用于某对象结构中的各元素的操作.它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作. 示例 有一个Message实体类,某些对象对它的操作有Insert()和Get()方法,现在要针对其中某一方法进行操作. MessageModel using System;using

设计模式之访问者模式

        刚刚学完设计模式的访问者模式(编译器模式),这里就对该模式进行了总结与分析. 一.产生原因         这里存在一个这样的问题:如果某系统已经完成了一个类层次并提供了满足需求的所有接口,现在要增加新的需求,我们需要怎么做?         可能你会采用增加该需求并把整个层次结构统统修改一遍.然而如果需求变动会不停的发生,而且需求的任何变动都会让整个结构统统修改一遍,此时你会怎么做呢?        所以,我们现在需要对这个系统结构进行重构,访问者模式也许就是你解决上面问题最好

实例讲解iOS应用的设计模式开发中的Visitor访问者模式_IOS

为了方便向大家展示,先给出简短的定义: 访问者模式(Visitor),表示一个作用于某对象结构中的各元素的操作.它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作. 紧接着,给出其类结构图. 访问者模式适用于数据结构相对稳定的系统,它把数据结构和作用于结构上的操作之间的耦合解脱开,使得操作结合可以相对自由地演化. 访问者模式的目的是要把处理从数据结构分离出来.很多系统可以按照算法和数据结构分开,如果这样的系统有比较稳定的数据结构,又有易于变化的算法的话,使用访问者模式就是比较合适的,

设计模式学习笔记(二十)—Visitor访问者模式

Visitor模式定义: 表示一个作用于某对象结构中各元素的操作.它可以使你不修改各元素类的前提下定义作用于这些元素的新操作,也就是动态的增加新的方法. Visitor模式结构图: Visitor模式中主要角色: 1)访问者角色(Visitor):为该对象结构(ObjectStructure)中的具体元素提供一个访问操作接口.该操作接口的名字和参数标识了要访问的具体元素角色.这样访问者就可以通过该元素角色的特定接口直接访问它. 2)具体访问者角色(ConcreteVisitor):实现Visto

设计模式——21访问者模式(Visitor)

21.访问者模式(Visitor)访问者模式把数据结构和作用于结构上的操作解耦合,使得操作集合可相对自由地演化.访问者模式适用于数据结构相对稳定算法又易变化的系统.因为访问者模式使得算法操作增加变得容易.若系统数据结构对象易于变化,经常有新的数据对象增加进来,则不适合使用访问者模式.访问者模式的优点是增加操作很容易,因为增加操作意味着增加新的访问者.访问者模式将有关行为集中到一个访问者对象中,其改变不影响系统数据结构.其缺点就是增加新的数据结构很困难.-- From 百科简单来说,访问者模式就是

C++设计模式之访问者模式_C 语言

前言 这是23+1(简单工厂模式)之中的最后一个了--访问者模式.访问者模式也是一个比较麻烦的设计模式.我也没有实战经验,对于访问者模式的理解完全来自GOF的<设计模式:可复用面向对象软件的基础>,而这篇文章就是根据对这本书的理解而写出来的.在读<设计模式:可复用面向对象软件的基础>的时候,让我想起自己做过的一个项目,该项目虽然没有使用访问者模式,但是,今天理解了该模式,如果使用该模式对之前做过的项目进行重构,将是一个不错的想法. 访问者模式 在GOF的<设计模式:可复用面向

JAVA设计模式之访问者模式详解_java

在阎宏博士的<JAVA与模式>一书中开头是这样描述访问者(Visitor)模式的: 访问者模式是对象的行为模式.访问者模式的目的是封装一些施加于某种数据结构元素之上的操作.一旦这些操作需要修改的话,接受这个操作的数据结构则可以保持不变. 分派的概念 变量被声明时的类型叫做变量的静态类型(Static Type),有些人又把静态类型叫做明显类型(Apparent Type):而变量所引用的对象的真实类型又叫做变量的实际类型(Actual Type).比如: 复制代码 代码如下: List lis

设计模式:访问者模式(Vistor)

访问者模式表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作. 访问者模式的目的是封装一些施加于某种数据结构元素之上的操作,一旦这些操作需要修改的话,接受这个操作的数据结构可以保持不变.为不同类型的元素提供多种访问操作方式,且可以在不修改原有系统的情况下增加新的操作方式,这就是访问者模式的模式动机. 访问者模式即表示一个作用于某对象结构中的各元素的操作,它使我们可以在不改变各元素的类的前提下定义作用于这些元素的新操作. 访问者模式适用于数据结构