访问者模式(Visitor)
意图:
表示一个作用于某对象结构中的各元素的操作. 它使你可以在不改变元素的类的
前提下定义这些元素的新操作.
适用性:
在下列情况下使用访问者模式:
1)一个对象结构包含很多类对象, 它们有不同的接口, 而你想对这些对象实施一些
依赖于其具体类的操作
2)需要对一个对象结构中的对象进行很多不同的并且不相关的操作, 而你想避免"污
染"这些对象的类
3)定义对象结构的类很少改变, 但经常需要在此结构上定义新的操作.
效果:
下面是访问者模式的一些优缺点:
1)访问者模式使得易于增加新的操作
2)访问者模式集中几种相关的操作分离无关的操作
3)增加新的ConcreteElement类很困难
4)通过类层次进行访问
5)累积状态
6)破坏封装
实现:
下面是当应用访问者模式时产生的其他两个实现问题:
1)双分派
意图:
表示一个作用于某对象结构中的各元素的操作. 它使你可以在不改变元素的类的
前提下定义这些元素的新操作.
适用性:
在下列情况下使用访问者模式:
1)一个对象结构包含很多类对象, 它们有不同的接口, 而你想对这些对象实施一些
依赖于其具体类的操作
2)需要对一个对象结构中的对象进行很多不同的并且不相关的操作, 而你想避免"污
染"这些对象的类
3)定义对象结构的类很少改变, 但经常需要在此结构上定义新的操作.
效果:
下面是访问者模式的一些优缺点:
1)访问者模式使得易于增加新的操作
2)访问者模式集中几种相关的操作分离无关的操作
3)增加新的ConcreteElement类很困难
4)通过类层次进行访问
5)累积状态
6)破坏封装
实现:
下面是当应用访问者模式时产生的其他两个实现问题:
1)双分派
2)谁负责遍历对象结构