首页 > 技术文章 > 大战设计模式【24】—— 访问者模式

linkstar 2017-11-09 19:54 原文

访问者模式(Visitor)

 

设计模式使用的例子https://github.com/LinkinStars/DesignPatternsAllExample

 

一、定义

提供一个作用于某对象结构中的各元素的操作表示,它使得可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 

 

二、结构

Visitor(抽象访问者):抽象访问者为对象结构中每一个具体元素类ConcreteElement声明一个访问操作,

从这个操作的名称或参数类型可以清楚知道需要访问的具体元素的类型,具体访问者则需要实现这些操作方法,定义对这些元素的访问操作。

ConcreteVisitor(具体访问者):具体访问者实现了抽象访问者声明的方法,每一个操作作用于访问对象结构中一种类型的元素。

Element(抽象元素):一般是一个抽象类或接口,定义一个Accept方法,该方法通常以一个抽象访问者作为参数。

ConcreteElement(具体元素):具体元素实现了Accept方法,在Accept方法中调用访问者的访问方法以便完成一个元素的操作。

ObjectStructure(对象结构):对象结构是一个元素的集合,用于存放元素对象,且提供便利其内部元素的方法。

 

三、优点

增加新的访问操作十分方便

将有关元素对象的访问行为集中到一个访问者对象中,而不是分散在一个个的元素类中,类的职责更加清晰

 

四、缺点

增加新的元素类很困难,需要在每一个访问者类中增加相应访问操作代码

元素对象有时候必须暴露一些自己的内部操作和状态,否则无法供访问者访问

 

五、应用场景

一个对象结构包含多个类型的对象,希望对这些对象实施一些依赖其具体类型的操作,不同的类型可以有不同的访问操作

对象结构中对象对应的类很少改变,但经常需要在此对象结构上定义新的操作

 

六、个人总结

1、访问者模式主要的作用在于对一类元素对象增加新的一个同类型的访问操作

2、在使用这个模式的时候一定要注意的是,一定要确保兑现给自己内部的操作和状态一定不能经常改变

3、对于访问者来说,所做的操作是在一起的,所以维护起来会容易,但同时也就打破了组合的封装

4、例子相对简单,比较抽象,主要体会的意思是,当一个访问者来的时候,如果需要新的方法去获取具体类的属性

则只需要在访问者中进行修改就可以了

 

 

 

参考博客:http://www.cnblogs.com/edisonchou/p/7247990.html

推荐阅读