У меня есть один родительский типВыберите реализацию на основе типа объекта в Java
public class IObject{}
и может иметь много подклассов (даже новые в будущем)
public class Object1 extends IObject{}
public class Object2 extends IObject{}
public class Object3 extends IObject{}
...
public class ObjectN extends IObject{}
Затем, основываясь на типе этих объектов, я должен выполнять разные операции.
public class StrategyForObject1(){void do{}}
public class StrategyForObject2(){void do{}}
public class StrategyForObject3(){void do{}}
...
public class StrategyForObjectN(){void do{}}
Так что я хочу от моего класса Context:
public Conext {
IObject o;
public void setObject(IObject o) {
this.o = o;
}
void logic() {
if (o instanceOf Object1) {
new StrategyForObject1().do();
}
if (o instanceOf Object2) {
new StrategyForObject2().do();
}
if (o instanceOf Object3) {
new StrategyForObject3().do();
}
...
if (o instanceOf ObjectN) {
new StrategyForObjectN().do();
}
}
}
Так на основе типа для выполнения различных алгоритмов, но я хочу, чтобы быть расширяемой, как в шаблоне стратегии, если мне нужно, чтобы добавить новый суб- класс IObject
, чтобы добавить новый класс StrategyForObject**N**
, но не изменить класс Conext
. В шаблоне стратегии мы должны указать Стратегию, но здесь мы должны сделать обратное: выбрать стратегию, основанную на типе объекта. Как сделать это на Java наилучшим образом?
Edit: IObject
не может быть изменен, чтобы добавить дополнительные методы. Я должен отделить логику от данных, поэтому не желательно добавлять реализацию логики в класс Object1
, например.
Это сообщение может быть полезно для вас: http://stackoverflow.com/questions/255214/when-should-i-use-the-visitor-design-pattern/35406737 # 35406737 –