我有一些類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