Java访问者模式而不是instanceof开关

在这个问题中 ,据说我可以使用访问者模式而不是一堆instanceof 。 Jmg说:“如果你不能自由改变A,B和C,你可以应用访客模式来实现同样的目标。”

据我所知,我仍然需要制作A,B和C支持访问者(例如,有一个accept()方法)。

我的问题是我绝对没有可能改变A,B和C.我只是从外国图书馆获得Car对象并且必须调用特定于卡车,赛车和公共汽车的wash()方法。

我想我还需要一个带有instanceofif-else-if构造。 我对吗?

是的,要实现访问者模式,您现在需要访问A,B和C的源,除非所有类具有相同的签名(因此所有类都具有相同名称的wash()方法)。 如果是这种情况,您可以使用多态来调用正确的方法。

否则,可以在源代码级别向您无权访问的类添加function。 关于访客模式的维基百科文章(http://en.wikipedia.org/wiki/Visitor_pattern),Java示例下面有一个小脚注:

注意:这种模式的一种更灵活的方法是创建一个包装器类,实现定义accept方法的接口。 包装器包含一个指向CarElement的引用,可以通过构造函数初始化它。 这种方法避免了必须在每个元素上实现接口。 [见下文Java Tip 98文章]

它引用了这篇文章: http : //www.javaworld.com/javaworld/javatips/jw-javatip98.html

总而言之,它是可能的,但它为您想要完成的小任务提供了大量的课程。 如果我是你,我会坚持使用instanceof。