`
vvggsky
  • 浏览: 67602 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Visitor模式

OS 
阅读更多
import java.util.ArrayList;
import java.util.Collection;

interface Visitor{
 public void visitElementA(ConcreteElementA elementA);//针对具体元素A的新方法
 public void visitElementB(ConcreteElementB elementB);//针对具体元素B的新方法
}
interface Element{
 public void accept(Visitor visitor);
}
class ConcreteVisitor implements Visitor{//具体的访问者

 public void visitElementA(ConcreteElementA elementA) {
  System.out.println(elementA.getName()+" visited by ConcreteVisitor ");
  
 }
 public void visitElementB(ConcreteElementB elementB) {
  System.out.println(elementB.getName()+" visited by ConcreteVisitor ");
  
 }
}
class ConcreteElementA implements Element{//具体元素A
 private String name;
 public ConcreteElementA(String name){
  this.name=name;
 }
  
 public void accept(Visitor visitor) {//接受访问者调用它针对该元素的新方法
  visitor.visitElementA(this);
  
 }
 public String getName() {
  return name;
 }
 
 
}
class ConcreteElementB implements Element{//具体元素B
 private String name;
 public ConcreteElementB(String name){
  this.name=name;
 }
 public String getName() {
  return name;
 }
 public void accept(Visitor visitor) {//接受访问者调用它针对该元素的新方法
  visitor.visitElementB(this);
  
 }
 
}
class ObjectStructure{//对象结构即元素的集合
 private Collection<Element> collection=new ArrayList<Element>();
 public void attach(Element element){
  collection.add(element);
 }
 public void detach(Element element){
  collection.remove(element);
 }
 public void accept(Visitor visitor )
   {
     for(Element element:collection){
      element.accept(visitor);
     }
   }

}
public class Client {
 public static void main(String args[]){
  Element elementA=new ConcreteElementA("ElementA");
  Element elementB=new ConcreteElementB("ElementB");
  Visitor visitor=new ConcreteVisitor();
  
  ObjectStructure os=new ObjectStructure();
  os.attach(elementA);
  os.attach(elementB);
  os.accept(visitor);
  
  }
 
}

分享到:
评论

相关推荐

    C++ Visitor模式

    **C++ Visitor模式详解** Visitor模式是设计模式中的一种行为模式,它在对象结构中引入了一个访问者角色,使得访问者能够对结构中的每个元素进行操作,而不改变元素本身的行为。这种模式允许我们在不修改已有类的...

    基于visitor模式和访问者模式的表达式树_求值引擎

    本项目基于“visitor模式”和“访问者模式”,实现了用于计算表达式的求值引擎,这涉及到一种将数学表达式转化为数据结构(表达式树)的方法,然后通过遍历该树来执行计算。下面我们将详细探讨这些概念。 1. **...

    Visitor模式Visitor模式

    Visitor 模式 Visitor 模式是一种行为型设计模式,它允许在不修改已有的类层次的情况下,增加新的操作或行为。这种模式可以使得开发者在不改变原有类层次的情况下,能够对对象进行不同的处理。 从给定的文件信息...

    C#面向对象设计模式纵横谈(24):(行为型模式) Visitor 访问者模式

    **Visitor模式**提供了一种解决方案,即通过将操作封装在访问者对象中,可以独立于元素类层次结构地为系统添加新的行为。这样不仅避免了对现有类结构的修改,还能保持代码的清晰性和可扩展性。 #### 结构与组成部分...

    设计模式C++学习之访问者模式(Visitor)

    访问者模式(Visitor)是一种行为设计模式,它允许在不修改对象结构的前提下向对象结构中的元素添加新的操作。这种模式将算法与数据结构分离,使得算法可以独立于数据结构进行变化,增强了系统的可扩展性。 在C++中...

    试试visitor设计模式

    也许最开始出现这种模式,是因为另外的原因: 我有一堆数据放在一个库里头,不想让其它人拿着, 如果你要用数据干活,那你就把函数指针给我,我来替你使用这个数据。...然后人们就说,这是visitor模式。

    decaf-lang#decaf-book-spec#visitor模式1

    rust中当然也可以有visitor模式这样的东西,比如

    设计模式之访问者模式(Visitor)

    **访问者模式(Visitor)详解** 访问者模式是一种行为设计模式,它使你可以在不修改对象结构的情况下,为对象添加新的操作。这种模式的核心在于将数据结构与对这些数据的操作解耦,使得增加新的操作变得容易,同时...

    Java 的双重分发与 Visitor 模式实例详解

    Java 的双重分发与 Visitor 模式实例详解 Java 中的双重分发(Double Dispatch)是一种机制,允许在运行时确定方法的调用,而不仅仅是根据方法的接收者,还受参数类型的决定。这种机制可以实现面向对象的多态。 在...

    C#设计模式之Visitor

    **二、Visitor模式的核心概念** 1. **元素对象(Element)**:这是被访问的对象,它们构成一个对象结构,通常包含接受访问者的方法。 2. **访问者(Visitor)**:定义了对每个元素的访问操作接口。每个具体访问者...

    设计模式系列之visitor

    "设计模式系列之visitor"是一个关于软件设计模式的讨论,特别是关注于“访问者”(Visitor)模式。这个模式是GOF(Gamma, Helm, Johnson, Vlissides)在他们的经典著作《设计模式:可复用面向对象软件的基础》中提出...

    领悟设计模式

    ### 领悟设计模式——Template Method与Visitor模式解析 #### 概述 本文源自C/C++ User's Journal,这是一本曾广受好评的专业C++杂志中的一个栏目。通过情景对话的形式,深入浅出地介绍了C++中的两种重要设计模式...

    C++设计模式.pdf

    Visitor模式表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 #### Chain of Responsibility模式 Chain of Responsibility模式避免请求发送者与接收...

    设计模式原理与应用之行为模式.pptx

    Visitor模式是一种行为模式,旨在解决表示一个作用于某对象结构中的各元素的操作的问题。该模式可以表示一个作用于某对象结构中的各元素的操作,在不改变各元素的类的前提下定义作用于这些元素的新操作。

    设计模式专题---设计模式示例代码(全)(python--c++)

    4. **Visitor模式**:Visitor模式属于行为设计模式,它为对象结构提供一种方式来遍历该结构中的所有对象并执行某种操作,而无需修改这些对象。这使得增加新操作变得容易,因为不需要修改现有类。 5. **Prototype...

    23种设计模式(C++).pdf

    - Visitor模式:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 - Chain of Responsibility模式:为解除请求的发送者和接收者之间耦合,而使多个...

    设计模式可复用面向对象软件的基础.zip

    2.8.8 Visitor 模式 52 2.9 小结 53 第3章 创建型模式 54 3.1 Abstract Factory(抽象工厂)— 对象创建型模式 57 3.2 Builder(生成器)—对象创建型 模式 63 3.3 Factory Method(工厂方法)— 对象创建型模式 70 ...

    设计模式(.PDF)

    2.8.8 Visitor 模式 52 2.9 小结 53 第3章 创建型模式 54 3.1 Abstract Factory(抽象工厂)— 对象创建型模式 57 3.2 Builder(生成器)—对象创建型 模式 63 3.3 Factory Method(工厂方法)— 对象创建型模式 70 ...

    设计模式精解-GoF 23种设计模式解析附C++.pdf

    - **Visitor模式**:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 - **Chain of Responsibility模式**:使多个对象都有机会处理请求,从而避免...

Global site tag (gtag.js) - Google Analytics