0
0x10FE149
Gast
hi leute
ich bin gerade dabei mir das state pattern anzusehen und bin auf ein paar unklarheiten gestoßen...
also angenommen wir haben die basisklasse state welche 3 methoden bereitstellt
von der klasse state wird 3 mal abgeleitet (ConcreteStateA, ConcreteStateB, ConcreteStateC). alle abgeleiteten klassen implementieren die 3 abstracten methoden auf verschiedene weise. so weit so gut. was nun wenn zb ConcreteStateC eine methode setData(Data data) bräuchte, welche aber in den beiden anderen zuständen keine verwendung findet???
in der klasse in der das state pattern zum einsatz kommt werden die verschiedenen zustände ja nur als member vom typ state gehalten also:
mir fallen 2 verschiedene möglichkeiten ein das oben beschriebe problem zu lösen...
1.) man castet: ((ConcreteStateC)current_state).setData(data); -> nachteil man muss die klasse ConcreteStateC importieren. somit wird das prinzip "stützen Sie sich auf abstraktionen und nicht auf konkrete klassen" welches durch die abstractFactory vertreten wird verletzt...
2.) man schreibt die methode setData(Data data) in die basisklasse -> nachteil man hat leere methodenrümpfe in 2 klassen...
beide möglichkeiten sagen mir nicht wirklich zu...
hat jemand ideen/erfahrungen?
danke im voraus
ich bin gerade dabei mir das state pattern anzusehen und bin auf ein paar unklarheiten gestoßen...
also angenommen wir haben die basisklasse state welche 3 methoden bereitstellt
Java:
public abstract void show();
public abstract void hide();
public abstract Data getData();
in der klasse in der das state pattern zum einsatz kommt werden die verschiedenen zustände ja nur als member vom typ state gehalten also:
Java:
private State current_state_ = null;
private State state_a_ = ConcreteStateFactory.createConcreteStateA();
private State state_b_ = ConcreteStateFactory.createConcreteStateB();
private State state_c_ = ConcreteStateFactory.createConcreteStateC();
mir fallen 2 verschiedene möglichkeiten ein das oben beschriebe problem zu lösen...
1.) man castet: ((ConcreteStateC)current_state).setData(data); -> nachteil man muss die klasse ConcreteStateC importieren. somit wird das prinzip "stützen Sie sich auf abstraktionen und nicht auf konkrete klassen" welches durch die abstractFactory vertreten wird verletzt...
2.) man schreibt die methode setData(Data data) in die basisklasse -> nachteil man hat leere methodenrümpfe in 2 klassen...
beide möglichkeiten sagen mir nicht wirklich zu...
hat jemand ideen/erfahrungen?
danke im voraus