一.
傳統時以pizza類舉例,一個抽象類pizza,由幾個pizza實現類實現,主餐廳看看客戶點什麼便生產,但是如果需要增加新的pizza品種,則要增加一個新的實現類,然後主餐廳裏增加對邏輯的判斷,顯然,違背了開放關閉原則。
所以:工廠模式爲解決某些需要生產大量一批類的問題
二.簡單工廠模式:
定義了一個創建對象的類,由這個類來封裝實例化對象的行爲
public class SimplePizzaFactory {
public Pizza CreatePizza(String ordertype) {
Pizza pizza = null;
if (ordertype.equals("cheese")) {
pizza = new CheesePizza();
} else if (ordertype.equals("greek")) {
pizza = new GreekPizza();
} else if (ordertype.equals("pepper")) {
pizza = new PepperPizza();
}
return pizza;
}
}
要東西餐廳不生產,直接交給工廠生產:
缺點:新增產品時,需要修改工廠類,不符合開閉原則
ordertype = gettype();
pizza = mSimplePizzaFactory.CreatePizza(ordertype);
三.工廠模式
工廠方法模式:定義了一個創建對象的抽象方法,由子類決定要實例化的類。
工廠方法模式將對象的實例化推遲到子類
鼠標:惠普鼠標 戴爾鼠標 工廠:惠普鼠標工廠 戴爾鼠標工廠 符合開閉原則
abstract Pizza createPizza(String ordertype);
四.抽象工廠模式
抽象工廠模式:定義了一個接口用於創建相關或有依賴關係的對象族,而無需明確指定具體類
把工廠抽象爲藉口,有工廠實現類(倫敦的工廠,巴黎的工廠),創建一個訂單,參數傳入指定的工廠,讓其去生產。
mOrderPizza=new OrderPizza(new LDFactory());
五.關鍵點
變量不要持有具體類的引用
不要讓類繼承自具體類,要繼承自抽象類或接口
不要覆蓋基類中已實現的方法