簡單工廠模式解決的問題是如何去實例化一個合適的對象。
簡單工廠模式的核心思想就是:有一個專門的類來負責創建實例的過程。
簡單工廠模式中包含的角色及其相應的職責如下:
工廠角色(Creator):這是簡單工廠模式的核心,由它負責創建所有的類的內部邏輯。當然工廠類必須能夠被外界調用,創建所需要的產品對象。
抽象(Product)產品角色:簡單工廠模式所創建的所有對象的父類,注意,這裏的父類可以是接口也可以是抽象類,它負責描述所有實例所共有的公共接口。
具體產品(Concrete Product)角色:簡單工廠所創建的具體實例對象,這些具體的產品往往都擁有共同的父類。
簡單工廠模式分離產品的創建者和消費者,有利於軟件系統結構的優化;但是由於一切邏輯都集中在一個工廠類中,導致了沒有很高的內聚性,同時也違背了“開放封閉原則”。另外,簡單工廠模式的方法一般都是靜態的,而靜態工廠方法是無法讓子類繼承的,因此,簡單工廠模式無法形成基於基類的繼承樹結構。
實現代碼
public class 簡單工廠 {
public static void main(String[] args) {
SimpleFactory sx = new SimpleFactory();
Food xiaochaorou = (Food) sx.getT(XiaoChaoRou.class);
xiaochaorou.get();
Food tudousi = (Food) sx.getT(TuDouSi.class);
tudousi.get();
}
}
//Food基類
interface Food{
public void get();
}
//小炒肉
class XiaoChaoRou implements Food{
@Override
public void get() {
System.out.println("你好,小炒肉出鍋啦,請慢用!");
}
}
//土豆絲
class TuDouSi implements Food{
@Override
public void get() {
// TODO Auto-generated method stub
System.out.println("你好,土豆絲出鍋啦,請慢用!");
}
}
//炒菜的廚房
class SimpleFactory<T>{
public T getT(Class clazz){
try {
return (T) clazz.newInstance();
} catch (InstantiationException | IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}