代码改变世界

访问者模式

2011-07-26 17:09  卫佳  阅读(408)  评论(0编辑  收藏  举报


对于系统中一个已经完成的类层次结构,我们已经给它提供了满足需求的接口。但是面 

对新增加的需求,我们应该怎么做呢?如果这是为数不多的几次变动,而且你不用为了一个 

需求的调整而将整个类层次结构统统地修改一遍,那么直接在原有类层次结构上修改也许是 

个不错的主意。 

    但是往往我们遇到的却是:这样的需求变动也许会不停的发生;更重要的是需求的任何 

变动可能都要让你将整个类层次结构修改个底朝天……。这种类似的操作分布在不同的类里 

面,不是一个好现象,我们要对这个结构重构一下了。 

    那么,访问者模式也许是你很好的选择。 

二、定义与结构 

    访问者模式,顾名思义使用了这个模式后就可以在不修改已有程序结构的前提下,通过 

添加额外的访问者来完成对已有代码功能的提升。 

     《设计模式Cheap sunglasses wholesale》一书对于访问者模式给出的定义为:表示一个作用于某对象结构中的各元 

素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。从定义 

可以看出结构对象是使用访问者模式必须条件,而且这个结构对象必须存在遍历自身各个对 

象的方法。这便类似于java 中的collectionPolarized Sunglasses Wholesale 概念了。 

    以下是访问者模式的组成结构: 

1)  访问者角色(Visitor ):为该对象结构中具体元素角色声明一个访问操作接口。该操作 

    接口的名字和参数标识了发送访问请求给具体访问者的具体元素角色。这样访问者就可 

    以通过该元素角色的特定接口直接访问它。 

2)  具体访问者角色(Concrete Visitor):实现每个由访问者角色(Visitor)声明的操作。 

3)  元素角色(Element):定义一个Accept 操作,它以一个访问者为参数。 

4)  具体元素角色(Concrete Element):实现由元素角色提供的Accept 操作。 

5)  对象结构角色(Object StructureWenZhou Sunglasses):这是使用访问者模式必备的角色。它要具备以下特 

    征:能枚举它的元素;可以提供一个高层的接口以允许该访问者访问它的元素;可以是 

    一个复合(组合模式)或是一个集合,如一个列表或一个无序集合。