[英]Java creating objects within objects
我正在嘗試創建一個比薩菜單。 我有3節課
由於成本變量用於底料,澆頭和整個比薩本身。
現在我的問題是,我將如何創建一個比薩餅對象,該比薩餅對象又創建一個基礎對象和一些澆頭對象,每個對象都有一個價格?
我可以算出如何計算整體價格,只是在對象內創建對象而已。
public class PizzaTopping extends Pizza{
private String topping;
public String getTopping(){
return this.topping;
}
public void setTopping( String topping ){
this.topping = topping;
}
}
public class PizzaBase extends Pizza{
private String base;
public void setBase( String base ){
this.base = base;
}
public String getBase(){
return this.base;
}
}
public class Pizza {
private double cost;
public void setCost( double cost ){
this.cost = Math.abs(cost);
}
public double getCost(){
return this.cost;
}
public void makingPizza(){
PizzaBase b = new PizzaBase();
}
}
用CostableItem類替換Pizza類:
public class CostableItem {
private double cost;
public void setCost( double cost ){
this.cost = Math.abs(cost);
}
public double getCost(){
return this.cost;
}
}
然后將其擴展到頂部和底部:
public class PizzaBase extends CostableItem {...}
public class PizzaTopping extends CostableItem {...}
之后,創建一個名為Pizza的類,該類具有一個基礎和多個澆頭:
public class Pizza{
private PizzaBase base;
private ArrayList<PizzaToppings> toppings;
//..
}
您根本不需要繼承。 最多您可能需要一個界面。 所以我會這樣設計:
public interface PricedItem {
double getCost(); //double is suitable for our purposes
}
由於您要計算成本,因此所有定價項目都應具有getCost()
方法。 這將適用於您的PizzaTopping
, PizzaBase
和Pizza
類:
public class PizzaTopping implements PricedItem
private String name;
private double cost;
public PizzaTopping(String name, double cost) {
this.name = name;
this.cost = cost;
}
...
@Override
public double getCost() {
return cost;
}
}
PizzaBase
相同:
public class PizzaBase implements PricedItem {
private double cost;
...
}
您的Pizza
類還將實現PricedItem
。 但是同樣重要的是,您將擁有PizzaTopping
實例的集合。 這里沒有繼承!
public class Pizza implements PricedItem {
private double cost;
private PizzaBase base;
private List<PizzaTopping> toppings;
public Pizza(double cost, PizzaBase base) {
this.cost = cost;
this.base = base;
toppings = new ArrayList<PizzaTopping>();
}
...
public void addTopping(PizzaTopping topping) {
//left as an exercise to the reader :)
}
@Override
public double getCost() {
//this is left as an exercise to the reader :)
return totalCost;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.