我有一些类Base
的实现,并且所有对象都收集在List<Base>
中。如何根据对象instanceof选择要执行的操作?
如何根据instanceof
这些对象调用特定的action
而不必使用详细的instanceof
检查?我怎样才能根据这些对象的实例选择一个service方法来执行,而不必关心执行哪个对象。应该以某种方式自动选择正确的服务方法,而不用指定类型或实例检查。
class Base;
class Foo extends Base;
class Bar extends Base;
class Service {
List<Base> bases;
public void someMethod() {
for (Base base : bases) {
//perform some instanceof dependend action.
//these actions cannot be inside of any Base class as it makes use of other objects too.
if (base instanceof Foo) {
fooService.action((Foo) base);
}
if (base instanceof Bar) {
barService.action((Bar) base);
}
}
}
}
//custom service methods
class FooService {
void action(Foo foo) {
}
}
class BarService {
void action(Bar bar) {
}
}
这种反模式的气味。战略模式可以在更少的情况下使用更脆弱的实例吗? –
或者使用某种工厂来加载服务方法。 – Marvo
那么,对于一个“策略”,我首先必须知道我正在处理的是哪个“Base”实例,对吧?因为我最终会遇到'FooStrategy'和'BarStrategy',如果我想在所有'Foo'实例上调用'FooStrategy',我必须首先执行'instanceof'检查... – membersound