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

Design Patterns -- Visitor

阅读更多

Visitor 模式是这个系列文章(也是笔者在读的这本书)的最后一个模式。按惯例,首先给出定义:Represent an operation to be performed on the elements of an object structure. Visitor lets you define a new operation without changing the classes of the elements on which it operates.

总结一下,这里有两点:1。添加operation 2。不改变原有的classes

事实上,到后面我们会发现要实现上面的两点有一个前提,就是原有的classes里必须有一个传入visitor 的函数。(即在开始设计类时,必须为后面的扩展留出一个冗余的函数。当然,这个函数也可以在子类里再添加。)

看一下类图:

 

这张图比较大,从Client 到ObjectStruture 到Element, 我们可以把这三者合起来作为一个已存在的Hierarchy(classes)。然后就可以看到,在加入Visitor 后,通过Accept 方法的调用,使Visitor 得以进入到Element 内部,接收Element(即,将Element 自身的控制权交给Visitor,比如通过:vistor.VisitConcreteElementB(this))

而《Design Pattern Java Workbook》认为,要较好的运用Visitor 模式,一般需要两点:

1。已有的classes (如Element )使其属性可访问(public )。

2。在Element 内部添加类似Accept 的函数并定义Visitor 。

另外,说到Visitor 模式,不可避免的要说一下 "double dispatch".  假设在Vistor 中有方法accept ( visitorInterface), Client 中有方法visit ( clientInterface). (请注意,这里说visitorInterface 和clientInterface, 意味着继承他们的各有不同的Visitor 和Client. )如图:

。。。(图没法传)

该顺序图大意为:首先Visitor 调用Client 的Accept ( this); 接着Client 的Accept 方法中调用传入Visitor 的 visit (this)。通过着简单的两步,保证了动态调用的 Visitor 是本Client 对应的Vistor。

“double dispatch“ 是Vistor 中比较重要的一点。另外,当Visitor 需要访问的Hierarchy 是一个比较复杂的结构(比如Composite)时,情况也需要更详细的处理。

这里只是简单介绍一些基本的东西,所以上述的内容不做描述,如果有读者有兴趣可以参考给出的参考文献。

 

参考:

http://www.dofactory.com/Patterns/PatternVisitor.aspx

http://www.crackj2ee.com/Article/ShowArticle.asp?ArticleID=227(笔者认为此文内容有误,仅供参考)

http://www.cs.rice.edu/~cork/Book/node62.html

http://www.cnblogs.com/zhenyulu/articles/79719.html

http://www.cjsdn.net/post/view?bid=17&id=180748&sty=3&age=0 

http://www.cnblogs.com/idior/archive/2006/02/03/325036.html

分享到:
评论

相关推荐

    java-design-patterns-master_JAVAdesignpattens_java_design_

    这个压缩包“java-design-patterns-master”显然是一个专注于Java设计模式的学习资源,旨在帮助开发者深入理解和应用这些模式。下面我们将详细探讨Java设计模式及其在实际开发中的应用。 1. **单例模式(Singleton...

    GOF-设计模式-Design Patterns-英文原版-高清-有目录-有页码

    **设计模式**(Design Patterns)是软件工程中的一个重要概念,它是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。本章节将从多个角度对设计模式进行深入探讨。 #### 二、设计模式的基本定义 ...

    java-Design-Patterns-chinese.rar_java design patterns

    这个“java-Design-Patterns-chinese.rar”压缩包文件包含了对Java设计模式的详细中文解释,非常适合Java开发者学习和参考。 在Java设计模式中,主要分为三大类:创建型、结构型和行为型模式。 1. **创建型模式**...

    DesignPatterns-master.zip

    - 访问者模式(Visitor):表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。 这23种设计模式不仅限于Java,它们在各种面向对象编程语言中都有广泛的...

    design-patterns-cpp-master.zip

    在"design-patterns-cpp-master.zip"这个压缩包中,我们可以期待找到C++实现的各种设计模式的代码示例。设计模式通常分为三大类:创建型模式、结构型模式和行为型模式。 1. 创建型模式: - 单例模式(Singleton)...

    yifanzheng-java-design-patterns-master_java_

    本资源"yifanzheng-java-design-patterns-master"是一个专注于Java设计模式的入门学习项目,作者承诺将持续更新,旨在帮助初学者和开发者更好地理解和应用这些模式。 设计模式通常分为三大类:创建型模式、结构型...

    Head-First-Design-Patterns-master设计模式官方源码

    20. 访问者模式(Visitor Pattern):访问者模式表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。 21. 中介者模式(Mediator Pattern):中介者模式...

    DesignPatterns.pdf_objects_designpatterns_

    标题中的"DesignPatterns.pdf_objects_designpatterns_"暗示了这可能是一个关于面向对象设计模式的PDF文档,而描述中的"Design patterns elements of reusable objects"进一步确认了这一点。设计模式的核心理念在于...

    Java-Design-Patterns

    包括责任链(Chain of Responsibility)、命令(Command)、解释器(Interpreter)、迭代器(Iterator)、中介者(Mediator)、备忘录(Memento)...Strategy)、模板方法(Template Method)、访问者(Visitor)等模式...

    Design.Patterns.Explained.Simply

    We've tried hard to avoid both of these categories with Design Patterns Explained Simply. This book is fast and simple way to get the idea behind each of the 29 popular design patterns. The book is ...

    Design_Patterns-Elements_of_Reusable_Object-Oriented_Software

    - **访问者(Visitor)**:表示一个作用于某对象结构中的各元素的操作。 #### 四、案例研究:文档编辑器设计 书中通过一个文档编辑器的设计案例,详细阐述了如何利用设计模式解决实际开发中遇到的问题。这个案例覆盖...

    design patterns elements of reusable object-oriented software

    Bridge(桥接)、Builder(生成器)、Chainof Responsibility(责任链)、Flyweight(蝇量)、Interpreter(解释器)、Mediator(中介者)、Memento(备忘录)、Prototype(原型)、Visitor(访问者)。 另外,第1章...

    设计模式专题,共 23 种设计模式。GOF design patter-java-design-patterns.zip

    设计模式是软件工程中的一种最佳实践,用于解决在软件开发过程中常见的问题。这些模式是由GoF(Gang of Four)在...在Java设计模式的实践中,可以通过`java-design-patterns-main`这个项目进一步探索和应用这些模式。

    Modern C++ Design Generic Programming and Design Patterns Applied.pdf

    Patterns such as Visitor, Singleton, Command, and Factories Multi-method engines For each generic component, the book presents the fundamental problems and design options, and finally implements a ...

    IT十年经典书系列英文版-Design_Patterns-Elements_of_Reusable_Object-Oriented_Software.pdf

    - 访问者(Visitor):表示一个作用于某对象结构中的各元素的操作。 ### 设计模式的应用 设计模式并非万能药,它们只适用于特定的情况。选择合适的设计模式需要根据具体问题进行判断。在实际应用中,设计模式应当...

    java-design-patterns-learn

    "java-design-patterns-learn"项目旨在全面介绍和学习Java中的设计模式。 首先,我们来看看设计模式的基本分类。根据其目的和作用,设计模式可以分为三大类:创建型模式、结构型模式和行为型模式。 1. 创建型模式...

    《Java Design Patterns》高清完整英文PDF版

    Learn how to implement design patterns in Java: each pattern in Java Design Patterns is a complete implementation and the output is ...Chapter 23: Visitor Patterns Chapter 24: Interpreter Patterns

Global site tag (gtag.js) - Google Analytics