java設計模式大話之工廠方法模式

2021-07-26 06:21:09 字數 1577 閱讀 2766

由於簡單工廠模式中工廠類集中了所有例項的建立邏輯,違反了高內聚責任分配原則,將全部建立邏輯集中到了乙個工廠類中;它所能建立的類只能是事先考慮到的,如果需要新增新的類,則就需要改變工廠類了。

當系統中的具體產品類不斷增多時候,可能會出現要求工廠類根據不同條件建立不同例項的需求.這種對條件的判斷和對具體產品型別的判斷交錯在一起,很難避免模組功能的蔓延,對系統的維護和擴充套件非常不利;

這些缺點在工廠方法模式中得到了一定的克服。

工廠方法模式:定義乙個建立產品物件的工廠介面,讓子類決定例項化哪一種例項物件,將建立例項物件的工作放在具體子類工廠,核心的工廠類將不再負責具體產品的的建立,也就是乙個抽象工廠定義了乙個建立產品的介面,至於具體建立哪種產品它不知道,產品的例項化被放到了具體的工廠子類中。

下面我們以乙個生活中的例子來闡述這個模式:假設小明是個富二代,大學畢業後拿了老爸的50萬投資了乙個小吃店,賣炸雞漢堡之類的小吃,他的目標很巨集大,要把小吃店乾成kfc那樣的連鎖店,目標很巨集大,路要一步一步走,剛開始的小店,模式很簡單,客人來了之後根據選單上的品種來點餐,點了之後小明現場做,說到這,大家是不是很快想起來了,這個不就是簡單工廠模式嗎,小明的這家店就是乙個簡單的工廠,客戶是具體的消費者,來了之後客戶不需要知道店裡面的小吃具體怎麼做的,有什麼配方,只需要跟小明說一聲。模式很簡單,適合單店。

小明很勤勞,加上配方正宗,生意異常火爆,不多久就賺了不少錢,開了不少分店,但是問題也慢慢凸顯,產品品種單一,花式不多,每一次上新品,每個點都要重新引進裝置,人員培訓,修改選單宣傳頁,代價很大。小明這時候痛定思痛決定引進**廚房,由**廚房統一把食品的胚胎,原型做出來,統一配送到每個店鋪,店鋪只要做最後的加工,裝飾,不同花樣的產品就能方便快捷的到客戶的手中,一舉解決了所有問題,小明的連鎖夢想越來越接近現實了。

// 產品介面,對應例子裡面的產品坯胎,初加工產品

inte***ce iproduct

// 具體的產品實現類 。漢堡,炸雞,飲料

public class producta implements iproduct

} public class productb implements iproduct

} // 抽象的工廠類,定義了其子類必須實現的createproduct()方法 ,對應就是**廚房

public abstract class factory

//具體工廠類,對應乙個個分店  

public class concretefactory extends factory catch (exception e)

return product;

} }

public class customer

}

上面的例子就結束了,以後**廚房負責建立初加工的各種產品,然後每一家分店在這個基礎上做個簡單的加工,消費者就能方便快捷的吃到美味可口的美食了。

大話設計模式之工廠方法模式(Java總結)

說到工廠方法模式,就不得不提到簡單工廠模式。後者違背了開放 封閉原則,所以才有了前者,即工廠方法模式。加減乘除計算器 定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類。工廠方法使乙個類的例項延遲到其子類。工廠介面 public inte ce ifactory 加法類工廠 public clas...

《大話設計模式》之工廠方法模式

定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類。工廠方法使乙個類的例項化延遲到其子類。將類的例項化 具體產品的建立 延遲到工廠類的子類 具體工廠 中完成,即由子類來決定應該例項化 建立 哪乙個類。定義工廠方法所建立的物件的介面 public inte ce operation public c...

大話設計模式 工廠方法

package org.ustc.factory public class leifeng public void wash public void sweep package org.ustc.factory public class volunteer extends leifeng packa...