У меня есть некоторые реализации класса Base
, и все объекты собраны в List<Base>
.Как выбрать действие для выполнения на основе объектов instanceof?
Как я могу назвать конкретный action
на основе instanceof
этих объектов без использования подробных instanceof
чеков? Как я могу выбрать servicemethod для выполнения на основе экземпляра этих объектов, но без необходимости заботиться о том, на каком объекте выполняется действие. Правильный сервис-метод следует выбирать как можно автоматически без проверки типа или экземпляра.
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
Ну, для «стратегии» я должен сначала узнать, в каком экземпляре «Базы» я работаю, правильно?Потому что я получаю «FooStrategy» и «BarStrategy», и если я хочу вызывать 'FooStrategy' на всех экземплярах' Foo', я бы сначала должен был выполнить проверку 'instanceof' ... – membersound