2015-11-25 67 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(); 
}