- 8
- 0
- 约6.38千字
- 约 5页
- 2021-11-07 发布于福建
- 举报
一、引子
对于系统中一个已经完成的类层次结构,我们已经给它提供了满足需求的接口。但是面对新增加的需求,
我们应该怎么做呢?如果这是为数不多的几次变动,而且你不用为了一个需求的调整而将整个类层次结构
统统地修改一遍,那么直接在原有类层次结构上修改也许是个 不错 的主意。
但是往往我们遇到的却是:这样的需求变动也许会不停的发生;更重要的是需求的任何变动可能都要让你
将整个类层次结构修改个底朝天 …… 。这种类似的操作分布在不同的类里面,不是一个好现象,我们要对
这个结构重构一下了。
那么,访问者模式也许是你很好的选择。
二、定义与结构
访问者模式, 顾名思义使用了这个模式后就可以在不修改已有程序结构的前提下, 通过添加额外的 “访问者 ”
来完成对已有代码功能的提升。
《设计 模式》一书对于访问者模式给出的定义为:表示一个作用于某对象结构中的各元素的操作。它使你
可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 从 定义可以看出结构对象是使用访问者
模式必须条件, 而且这个结构对象必须存在遍历自身各个对象的方法。 这便类似于 java 中的 collection 概念
了。
以下是访问者模式的组成结构:
1) 访问者角色 (Visitor ):为该对象结构中具体元素角色声明一个访问操作接口。 该操作接口的名字和参数
标识了发送访问请求给具体访问者的具体元素角色。这样访问者就可以通过该元素角色的特定接口直接访
问它。
2) 具体访问者角色( Concrete Visitor ):实现每个由访问者角色( Visitor )声明的操作。
3) 元素角色( Element):定义一个 Accept 操作,它以一个访问者为参数。
4) 具体元素角色( Concrete Element ):实现由元素角色提供的 Accept 操作。
5) 对象结构角色( Object Structure ):这是使用访问者模式必备的角色。它要具备以下特征:能枚举它的元
素;可以提供一个高层的接口以允许该访问者访问它的元素;可以是一个复合(组合模式)或是一个集合,
如一个列表或一个无序集合。 来张类图就能更加清晰的看清访问者模式的结构了。
那么像引言中假想的。我们应该做些什么才能让访问者模式跑起来呢?首先我们要在原有的类层次结构中
添加 accept 方法。然后将这个类层次中的类放到一个对象结构中去。这样再去创建访问者角色 ……
四、双重分派
对了,你在上面的例子中体会到双重分派的实现了没有?
首先在客户程序中将具体访问者模式作为参数传递给具体元素角色 (加亮的地方所示)。这便完成了一
次分派。
进入具体元素角色后,具体元素角 色调 用作为参数的具体访问者模式中的 visitor 方法,同时将自己
(this )作为参数传递进去。具体访问者模式再根据参数的不同来选择方法来执行(加亮的地方所示) 。这
便完成了第二次分派。
五、优缺点及适用情况
先来看下访问者模式的使用能否避免引言中的痛苦。使用了访问者模式以后,对于原来的类层次增加
新的操作,仅仅需要实现一个具体访问者角色就可以了,而 不必修改整个类层次。而且这样符合 “开闭原
则 ”的要求。而且每个具体的访问者角色都对应于一个相关操作,因此如果一个操作的需求有变,那么仅仅
修改一个具 体访问者角色,而不用改动整个类层次。
看来访问者模式确实能够解决我们面临的一些问题。
而且由于访问者模式为我们的系统多提供了一层 “访问者 ”,因此我们可以在访问者中添加一些对元素
角色的额外操作。
但是 “开闭原则 ”的遵循总是片面的。如果系统中的类层次发生了变化,会对访问者模式产生什么样的
影响呢?你必须修改访问者角色和每一个具体访问者角色 ……
看来访问者角色不适合具体元素角色经常发生变化的情况。而且访问者角色要执行与元素角色相关的
操作,就必须让元素角色将自己内部属性暴露出来,而在 j
您可能关注的文档
最近下载
- 《我家是动物园》教案(2025—2026学年).docx VIP
- QSY 02025-2017 油水井压裂设计规范.pdf VIP
- 《轩辕剑4全全地图超完美攻略--黑龙舞兮云飞扬(最详细的心得体会、可下载、可编辑、可复制)》.doc VIP
- 2025-2026学年湖南省长沙市浏阳市高一(上)期末数学试卷(含答案).pdf VIP
- 一种基于层次分析法与灰色模糊综合评价法的项目效益评估方法.docx VIP
- 设备自检记录(电焊机).doc VIP
- 保时捷Boxster、Boxster S_2013款_汽车使用手册用户操作图解驾驶车主车辆说明书电子版.pdf
- 2024新疆中考语文试题(附参考答案) .pdf VIP
- 颅脑体表标志与脑出血穿刺定位方法.ppt VIP
- 塑料注射成型与模具设计指南_401-450.docx VIP
原创力文档

文档评论(0)