簡體   English   中英

將抽象類擴展為枚舉 - 策略模式

[英]Extends an abstract class to an enum - Strategy Pattern

我正在嘗試使用Java中的設計模式策略。 所以,我有一個名為Nenuphare的抽象類,它使用一些接口( MortAlterationEtatModifPV ),我必須創建5種類型的Nenuphare。 如果我是對的,我必須保持Nenuphare作為一個抽象類是我想留在設計模式戰略。 最簡單的方法是創建5個實現Nenuphare的類,並為每個類更改MortAlterationEtatModifPV 但我必須用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM