2015-11-25 69 views
-4

所以我試圖實現兩個類之間的聚合關係。但是,我對如何用抽象類實現它感到困惑。 有什麼建議嗎?如何聚合抽象類?

Beverage.java

public class Beverage { 

     private Size size; 
     private SizeFactor sizeCost; 
     private String description; 

     public Beverage(){} 

     public Size getSize(){ 
      return size; 
     } 

     public SizeFactor getSizeCost(){ 
      return sizeCost; 
     } 

     public String getDescription(){ 
      return description; 
     } 

     public void setSize(Size s){ 
      size = s; 
     } 

     public void setSizeCost(SizeFactor cost){ 
      sizeCost = cost; 
     } 

     public double cost(){ 
      return sizeCost.sizeCost(size); 
     } 

    } 

BeverageWithIngredient.java

public abstract class BeverageWithIngredient extends Beverage { 

    private Beverage drink = new Beverage(); 

    public abstract String getDescription(); 
    public abstract double cost(); 

} 

基本上,這是我想要做的事:

UML

+0

您不應該使用'extends'進行聚合。這被認爲是'有'關係,而不是'是'關係,是'擴展'意味着的。在這裏閱讀更多:http://beginnersbook.com/2013/05/aggregation/ – Bimde

+0

混合* has-a *和* is-a *關係沒有任何問題。此圖滿足修飾器模式 – k0ner

+0

上面的圖遵循裝飾器模式,如k0ner所述。 – adventuredoge

回答

1

你必須注入BeverageBeverageWithIngredient

public abstract class BeverageWithIngredient extends Beverage { 

    private Beverage drink; 

    public BeverageWithIngredient(Beverage drink) { 
     this.drink = drink; 
    } 

    public abstract String getDescription(); 
    public abstract double cost(); 
}