Ich habe einen Elternteil TypenWählen Sie Implementierung basierend auf der Art des Objekts in Java
public class IObject{}
und viele Unterklassen haben kann (sogar neue in der Zukunft)
public class Object1 extends IObject{}
public class Object2 extends IObject{}
public class Object3 extends IObject{}
...
public class ObjectN extends IObject{}
Dann muss ich basierend auf der Art dieser Objekte verschiedene Operationen durchführen.
public class StrategyForObject1(){void do{}}
public class StrategyForObject2(){void do{}}
public class StrategyForObject3(){void do{}}
...
public class StrategyForObjectN(){void do{}}
Deshalb mag ich aus meiner Kontextklasse:
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();
}
}
}
So basierend auf der Art verschiedene Algorithmen auszuführen, aber ich will wie in Strategiemustern erweiterbar sein, wenn ich neue Unter hinzufügen muß Klasse von IObject
nur um neue StrategyForObject**N**
Klasse hinzuzufügen, aber nicht um die Conext
Klasse zu ändern. Im Strategie-Muster müssen wir die Strategie angeben, aber hier müssen wir das Gegenteil tun: um die Strategie basierend auf der Art des Objekts zu wählen. Wie geht das in Java am besten?
bearbeiten: Die IObject
kann nicht geändert werden, um zusätzliche Methoden hinzuzufügen. Ich muss Logik von Daten trennen, also ist es nicht wünschenswert, Implementierung der Logik in Object1
Klasse zum Beispiel hinzuzufügen.
Dieser Beitrag für Sie nützlich sein können: http://stackoverflow.com/questions/255214/when-should-i-use-the-visitor-design-pattern/35406737 # 35406737 –