Ich versuche, das Designmuster Strategie in Java zu verwenden. Also, ich habe eine abstrakte Klasse namens Nenuphare
, die einige Schnittstellen verwenden (Mort
, AlterationEtat
und ModifPV
) und ich muss 5 Arten von Nenuphare erstellen. Wenn ich recht habe, muss ich Nenuphare
als abstrakte Klasse behalten, will ich im Designmuster Strategie bleiben. Der einfachste Weg wäre, eine Klasse zu erstellen, die Nenuphare implementiert und für jede Klasse Mort
, AlterationEtat
und ModifPV
ändert. Aber ich muss das mit einem enum
tun. Leider kann enum eine Klasse nicht erweitern, da sie den enum-Typ bereits erweitert.Erweitert eine abstrakte Klasse zu einem Enum - Strategie Pattern
Hier ist mein Code für Nenuphare
:
public abstract class Nenuphare {
public int etatVieillissement = 3;
protected String nom = "Eau";
protected Mort mort = new MortSubite();
protected AlterationEtat altetat = new NoAlteration();
protected ModifPV pv = new NoModifPV();
public Nenuphare(){}
public Nenuphare(Mort mort, AlterationEtat altetat, ModifPV pv){
this.mort = mort;
this.altetat = altetat;
this.pv = pv;
}
public void death(){
mort.mort();
}
public void alteration(){
altetat.altEtat();
}
public void modificationPV(){
pv.modifPV();
}
}
Ich versuchte, meine 5 Art von Nenuphare
auf diese Weise zu erstellen:
public enum TypeNenuphare extends Nenuphare {
type1{ this.mort = ..., this.altetat = ..., this.pv = ... }, type2{ ... }, type3 { ... }, type4 { ... }, type5 { ...};
}
Natürlich, die nicht wegen der extends
funktioniert. Ich dachte, dass ich Nenuphare
als interface
setzen und implements
verwenden könnte, aber ich muss das Entwurfsmuster Strategie verwenden! Da ich neu bin, weiß ich nicht wirklich weiter.
Vielen Dank, aber wir mussten eine abstrakte Klasse verwenden, um im Designmuster Strategie zu bleiben! Sorry für die französischen Variablen übrigens. Für den 'öffentlichen void death() {...}' macht es Sinn für mich, da die Methode vorerst etwas druckt. – pioupiou1211
Sie können abstrakte Klassen verwenden, müssen dies aber nicht tun. – Fildor