当前位置: 首页 > 面试题库 >

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

柳梓
2023-03-14
问题内容

在这个问题上,据说我可以使用访问者模式而不是一堆instanceofs。Jmg说:“如果您不能随意更改A,B和C,则可以应用访问者模式来实现相同的目的。”

据我了解,我仍然必须让A,B和C支持访问者(accept()例如,有一种方法)。

我的问题是,我绝对不可能更改A,B和C。我只是从外国图书馆获得Car对象,而必须调用wash()卡车,赛车和公共汽车专用的方法。

我认为我仍然需要if-else-if使用instanceofs 进行构造。我对吗?


问题答案:

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

否则,可以在源代码级别为您无权访问的类添加功能。在Wikipedia上有关访问者模式的文章(http://en.wikipedia.org/wiki/Visitor_pattern),在Java示例下面有一个小脚注:

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

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

因此,尽管有可能,但它为您要执行的小任务提供了大量类。如果我是你,我会坚持使用instanceof。



 类似资料:
  • 主要内容:介绍,实现,ComputerPart.java,Keyboard.java,Monitor.java,Mouse.java,Computer.java,ComputerPartVisitor.java,ComputerPartDisplayVisitor.java,VisitorPatternDemo.java在访问者模式(Visitor Pattern)中,我们使用了一个访问者类,它改变了元素类的执行算法。通过这种方式,元素的执行算法可以随着访问者改变而改变。这种类型的设计模式属于行

  • 亦称: Visitor 意图 访问者模式是一种行为设计模式, 它能将算法与其所作用的对象隔离开来。 问题 假如你的团队开发了一款能够使用巨型图像中地理信息的应用程序。 图像中的每个节点既能代表复杂实体 (例如一座城市), 也能代表更精细的对象 (例如工业区和旅游景点等)。 如果节点代表的真实对象之间存在公路, 那么这些节点就会相互连接。 在程序内部, 每个节点的类型都由其所属的类来表示, 每个特定

  • 在访问者模式(Visitor Pattern)中,我们使用了一个访问者类,它改变了元素类的执行算法。通过这种方式,元素的执行算法可以随着访问者改变而改变。这种类型的设计模式属于行为型模式。根据模式,元素对象已接受访问者对象,这样访问者对象就可以处理元素对象上的操作。 介绍 意图:主要将数据结构与数据操作分离。 主要解决:稳定的数据结构和易变的操作耦合问题。 何时使用:需要对一个对象结构中的对象进行

  • 简介 访问者模式是一种将算法与对象结构分离的软件设计模式。 这个模式的基本想法如下:首先我们拥有一个由许多对象构成的对象结构,这些对象的类都拥有一个accept方法用来接受访问者对象;访问者是一个接口,它拥有一个visit方法,这个方法对访问到的对象结构中不同类型的元素作出不同的反应;在对象结构的一次访问过程中,我们遍历整个对象结构,对每一个元素都实施accept方法,在每一个元素的accept方

  • 在访问者模式(Visitor Pattern)中,我们使用了一个访问者类,它改变了元素类的执行算法。通过这种方式,元素的执行算法可以随着访问者改变而改变。这种类型的设计模式属于行为型模式。根据模式,元素对象已接受访问者对象,这样访问者对象就可以处理元素对象上的操作。 介绍 意图:主要将数据结构与数据操作分离。 主要解决:稳定的数据结构和易变的操作耦合问题。 何时使用:需要对一个对象结构中的对象进行

  • 访问者模式 不知不觉当中,我们就到了最后一种设计模式,即访问者模式。访问者模式,听上去复杂一些。但是,这种模式用简单的一句话说,就是不同的人对不同的事物有不同的感觉。比如说吧,豆腐可以做成麻辣豆腐,也可以做成臭豆腐。可是,不同的地方的人未必都喜欢这两种豆腐。四川的朋友可能更喜欢辣豆腐,江浙的人就可能对臭豆腐更喜欢一些。那么,这种情况应该怎么用设计模式表达呢? typedef struct _Tof