Visitor的设计理念,就是将责任归结到一个类里,如果将来需求有变更,可以通过继承一个类,而不用修改一个固定元素的代码,添加方法,这就是一个习惯,任何人都只希望添加新类,而不愿意去修改旧代码的方法。
在Visitor中,固定的元素就是Element(比如是XML中的Element),XML的解析策略对于不同应用可能是不同的,比如A应用希望遇到>将其转换成>,B应用希望将>转换为GT,都有可能,如果我们在Element添加方法,那么Element的解析就变的很脆弱,需求一变更,就需要动Element的源代码。但其实真正需要是归结于外部,而不是Element的责任,所以,要把责任推到一个Visitor上,又想把责任推到Visitor上,又想解析这个Element,就应该让Visitor有一个Element的引用,那就是回调了,Element接受一个Visitor,在这个方法里再调用Visitor的visit(Element)方法,OK,以后要改,只需要变更Vistor实例,实现具体的Visit方法,就可以搞定,事实上用过SAX的,对这个模式是熟悉的,因为他的XML遍历就是基于Visitor模式的。
那么 在这我想总结回调的两点作用。
1. 如上所述,将责任推出
2. 如AJAX回调一样,实现一种(分布式)交互机制