在这个问题中,据说我可以使用访客模式而不是一堆instanceofs.Jmg说:"如果你不能自由改变A,B和C,你可以应用访客模式来实现同样的目标."
据我所知,我仍然需要为A,B和C支持访问者(accept()例如,有一个方法).
我的问题是我完全没有可能改变A,B和C.我只是从外国图书馆获得Car对象并且必须调用wash()特定于卡车,赛车和公共汽车的方法.
我想我还需要一个if-else-if带instanceofs 的结构.我对吗?
Léo*_*urg 10
是的,要实现访问者模式,您现在需要访问A,B和C的源,除非所有类具有相同的签名(因此所有类都具有相同名称的wash()方法).如果是这种情况,您可以使用多态来调用正确的方法.
否则,可以在源代码级别向您无权访问的类添加功能.关于访问者模式的维基百科文章(http://en.wikipedia.org/wiki/Visitor_pattern),Java示例下面有一个小脚注:
注意:更灵活的方法是创建一个包装器类,实现定义accept方法的接口.包装器包含一个指向CarElement的引用,可以通过构造函数初始化它.这种方法避免了必须在每个元素上实现接口.[参见下面的Java Tip 98文章]
它引用了这篇文章:http://www.javaworld.com/javaworld/javatips/jw-javatip98.html
总而言之,它是可能的,但它为您想要完成的小任务提供了大量的课程.如果我是你,我会坚持使用instanceof.