我认为,这个访问者应该是强调在不改变对象的情况下,添加操作对象的新方法,我模拟了一个动物喂食和游乐的场景,给出对体力值的操作。在无法修改动物类的情况下有些用处,但如果能修改这些类,还是直接添加这些方法好些。
代码是 groovy 的。
|
我认为,这个访问者应该是强调在不改变对象的情况下,添加操作对象的新方法,我模拟了一个动物喂食和游乐的场景,给出对体力值的操作。在无法修改动物类的情况下有些用处,但如果能修改这些类,还是直接添加这些方法好些。
代码是 groovy 的。
|
我认为函数编程的Lambda表达式其实也是一种访问者模式,如下:
List costBeforeTax = Arrays.asList(100, 200, 300, 400, 500);
costBeforeTax.stream().map((cost) -> cost + .12*cost)
这是访问集合costBeforeTax中元素,将原来的值进行算术cost + .12*cost运算,这个算法其实是访问行为,是在访问者定义的,而不是定义在被访问者集合的元素中。
[该贴被banq于2014-03-17 18:06修改过]
访问者模式可以接受访问,这与观察者模式中的被观察者可以接受观察很相似。不同的是观察者模式中的主题是自我改变了状态,然后通知观察者我已经作出了改变,你要相应地去做什么。而访问者模式是要通过访问者来改变被访问者的状态。
[该贴被freebox于2014-03-17 18:53修改过]