![](/img/trans.png)
[英]How to write Builder Pattern for class that extends abstract class in Java?
[英]Extends an abstract class to an enum - Strategy Pattern
我正在嘗試使用Java中的設計模式策略。 所以,我有一個名為Nenuphare
的抽象類,它使用一些接口( Mort
, AlterationEtat
和ModifPV
),我必須創建5種類型的Nenuphare。 如果我是對的,我必須保持Nenuphare
作為一個抽象類是我想留在設計模式戰略。 最簡單的方法是創建5個實現Nenuphare的類,並為每個類更改Mort
, AlterationEtat
和ModifPV
。 但我必須用enum
來做到這一點。 不幸的是,枚舉不能擴展類,因為它已經擴展了枚舉類型。
這是我的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();
}
}
我嘗試用這種方式創建我的5種類型的Nenuphare
:
public enum TypeNenuphare extends Nenuphare {
type1{ this.mort = ..., this.altetat = ..., this.pv = ... }, type2{ ... }, type3 { ... }, type4 { ... }, type5 { ...};
}
當然,由於extends
,這不起作用。 我認為我可以將Nenuphare
設置為interface
並使用implements
,但我必須使用設計模式策略! 由於我是新手,我真的不知道如何繼續。
讓Nenuphare成為枚舉。
例:
public enum Strategy{
STRAT1("Strat1", new Mort1()),
STRAT2("Strat2", new Mort2()),
DEFAULT("default", new MortSubite());
private final String name;
private final Mort mort;
public String getName(){ return name;}
public void death(){mort.mort();} //<- void does not really make sense here.
Strategy( String pName, Mort pMort ){name = pName; mort = pMort;}
}
現在只需為你的“死亡”,“改變”交換“名稱”,......
用法:
System.out.println(Strategy.DEFAULT.getName());
另見: https : //docs.oracle.com/javase/tutorial/java/javaOO/enum.html
旁注:在國際范圍內,您應該使用英文變量名稱。 這使得非法語人士更容易理解您的代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.