【发布时间】:2018-04-11 00:45:54
【问题描述】:
我面临一个设计挑战,我必须根据对象的实例进行切换。有人告诉我,在 Java 中使用 instanceof 运算符是个坏主意。有人建议访问者模式,但在我面临的场景中,切换必须基于一个对象实例而不是两个。所以我觉得使用非常具体和令人困惑的访问者模式可能会过大。请提出正确的方法。以下是示例
VehicleHandler ( Vehicle vehicle){
if( vehicle instanceof Car)
// Do something which cant be tied to Car's impl ( Dont want busiess logic to be in the class itself
else if(vehicle instanceof Bike)
// Do something
}
Car 和Bike 实现标记接口Vehicle。
有许多类具有将车辆作为参数的函数,并且需要在每个类中分叉,例如VehicleTransformer、VehicleValidator 等。这些方法正在执行完全不相关的操作。请帮我确定这个问题的正确设计模式。
【问题讨论】:
-
我不明白访问者模式的问题。
-
您能否编辑您的问题,让我们举例说明处理程序对每种车辆类型的作用?这可能有助于我们决定什么是合适的,例如。你能有
Vehicle::handle()。 -
您不想使用访问者模式,也不想使用
instanceof。还有什么你不想用的吗?为什么不使用这些选项? -
要打开一个对象的实例,你在超类中创建一个方法并在子类中以不同的方式实现它。这是最基本的OO概念。它仅适用于“一个对象实例”,而不适用于两个,但根据您的要求没问题。
-
困扰我的是它可能是特定于某些场景的业务逻辑。为什么它应该成为 Vehicle 接口的一部分?假设我正在提供车辆类,而第三方正在开发其他东西,为什么它们的特定逻辑应该在车辆内部?
标签: java oop design-patterns instanceof visitor-pattern