`
vvggsky
  • 浏览: 65188 次
  • 性别: 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);
  
  }
 
}

分享到:
评论

相关推荐

    Visitor模式Visitor模式

    Visitor模式.docVisitor模式.doc

    C++ Visitor模式

    23种设计模式之二十(行为模式)Visitor模式

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

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

    试试visitor设计模式

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

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

    面向对象 北工大 课设 使用多种设计模式,实现的求值引擎,包括表达式树的构建

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

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

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

    访问者模式(Visitor) 用意:适用于数据结构相对未定的系统,把数据结构和作用于结构上的操作间的耦合解开。

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

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

    36种最新设计模式整理

    Visitor 模式 Guarded Suspension 模式 Producer Consumer 模式 Worker Thread 模式 Thread-Per-Message 模式 Future 模式 Read-Write-Lock 模式 Two-phase Termination 模式 Thread-Specific Storage...

    设计模式精解-GoF 23种设计模式解析

    设计模式精解-GoF 23 种设计模式解析附 C++实现源码 目 录 引 言 0.1 设计模式解析(总序) ...3.8 Visitor模式 3.9 Chain of Responsibility模式 3.10 Iterator模式 3.11 Interpreter模式 4 说明

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

    主要介绍了Java 的双重分发与 Visitor 模式实例详解,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

    设计模式可复用面向对象软件的基础.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 ...

    C#设计模式.PDF

    四、 一个实际应用Visitor模式的例子 198 五、 在什么情况下应当使用访问者模式 202 六、 使用访问者模式的优点和缺点 203 设计模式(21)-Template Method Pattern 204 一、 模板方法(Template Method)模式 204 ...

    设计模式--C++

    5.11 VISITOR(访问者)—对象行为型模式 218 5.12 行为模式的讨论 228 5.12 1 封装变化 228 5.12.2 对象作为参数 228 5.12.3 通信应该被封装还是被分布 229 5.12.4 对发送者和接收者解耦 229 5.12.5 总结 231 第 6 ...

    GOLF设计模式(C++语言版)

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

    设计模式(.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 ...

    C#设计模式大全

    四、 一个实际应用Visitor模式的例子 五、 在什么情况下应当使用访问者模式 六、 使用访问者模式的优点和缺点 设计模式(21)-Template Method Pattern 一、 模板方法(Template Method)模式 二、 模版方法...

    《设计模式》中文版(23个设计模式的介绍与运用)

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

    Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides23种设计模式

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

Global site tag (gtag.js) - Google Analytics