定义:封装对数据结构中元素的操作,使得不需要修改这些元素的类,就可以为增加新的操作. 优点: - 符合单一职责.
- 优秀的扩展性.很方便地增加对元素的操作.
- 很好的灵活性.
缺点: - 元素的细节需要对访问者公开.
- 元素变更比较困难.增加或删除元素,需要对访问者也进行修改.
- 违背依赖倒置原则.访问者依赖具体元素而不是抽象元素.
应用场景: - 一个对象结构包含很多类对象,它们有不同的接口,而你想对这些对象实施一些依赖于其具体类的操作。
- 需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而你想避免让这些操作“污染”这些对象的类。 Vi s i t o r使得你可以将相关的操作集中起来定义在一个类中。当该对象结构被很多应用共享时,用Vi s i t o r模式让每个应用仅包含需要用到的操作。
- 定义对象结构的类很少改变,但经常需要在此结构上定义新的操作。改变对象结构类需要重定义对所有访问者的接口,这可能需要很大的代价。如果对象结构类经常改变,那么可能还是在这些类中定义这些操作较好。
代码: https://github.com/DewMaple/DesignMode_Java/blob/master/src/com/design_mode/VisitorPattern.java
|