你的問題基本上是Java Factory Design Pattern的一個例子。 假設您有一個項目,分別是具有多個Interfaces和不同類的類層次結構,那麼創建任何類的最簡單方法是什麼?這是工廠來處理所有關於類實例創建操作的地方。
現在你的情況下,方便的辦法是改變你的Class Food
一個接口,例如:
public interface Food {
String getType();
}
現在,您需要Cake
和Bread
類,實現interface Food
public class Cake implements Food{
@Override
public String getType() {
return "Cake";
}
}
public class Bread implements Food{
@Override
public String getType() {
return "Bread";
}
}
現在您需要定義您的FoodFactory
類,該類有一個靜態的get
方法,該方法返回Food
,具體取決於具有蜜蜂的標準提供。
public class FoodFactory {
public static Food get(String classifier){
if(classifier.equals("Cake")) return new Cake();
if(classifier.equals("Bread")) return new Bread();
//no matching Food to create
throw new IllegalArgumentException("The " + classifier + " is not a valid classifier");
}
}
一旦你有你的工廠,你可以用它來進行任何創建操作。 如果你想從食品例如打印出Bread
,你可以這樣實現這一點:
//food is now an instanceof Bread
Food food = FoodFactory.get("Bread");
System.out.println(food.getType());
這只是簡單地打印
Bread
另外: 要確保每一個創造的處理只有FoodFactory
你應該使你的食物類的每一個構造函數protected
會很好的尊重Java語法,especia lly爲這麼短的片段 – Dici
*「我有兩種類型的食物,比如麪包和蛋糕」* - 他們應該是兩個延伸'Food'的具體類,我想。因此,工廠選擇哪一類產生參數。 –
簡短的回答是否定的。如果沒有叫Bread的類,那麼'getClass()。getName()'永遠不會打印「Bread」。 –