Design Patterns -- Visitor
来源:互联网 发布:托克托网络花店 编辑:程序博客网 时间:2024/05/16 04:41
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
- Design Patterns -- Visitor
- Design Patterns - Visitor Pattern
- Design Patterns Uncovered: The Visitor Pattern
- Design Pattern - Behavioral Patterns - Visitor Pattern
- Patterns in SOME - Visitor
- Design Patterns
- Design Patterns
- Design Patterns
- design patterns:
- Design Patterns
- Design Patterns
- Design Patterns
- Design Patterns
- Design Patterns
- Design Patterns
- design patterns
- Design Pattern 15-visitor
- Visitor Design Pattern
- eclipse treeViewer的使用 (例程)
- 画直线算法
- 对象和接口(通俗讲解)
- 数据结构与算法分析课后习题第三章(11)
- ibatis 对象关系实现
- Design Patterns -- Visitor
- php上传文件,内存不足解决之道
- 占地儿
- ADO.NET读取Eexcel数据!
- sessionfilter
- Microsoft的测试题
- 实时数据库
- 炒股因势选术?
- 一种自动关闭对话框的简单方法