我們先來回顧一下簡單工廠模式
這是我的關於工廠模式的部落格,裡面有乙個關於運算的例題,我們今天還是用這個例題。
簡單工廠模式uml類圖:
我們再來看一下工廠方法模式關於運算類的uml類圖:
好,我們把兩張類圖放在一起來看,首先,他們有很大的不同對不對,其次,你會發現其實工廠方法模式看起來更為麻煩,那我們為什麼要用工廠方法模式呢?
首先,我們先來看一下簡單工廠模式的優點。
簡單工廠模式的最大的優點在於工廠類中包含了必要的邏輯判斷,根據客戶端的選擇,動態例項化相關的類,對於客戶端來說,去除了與具體產品的依賴。
但是,假如說我們需要再加乙個類,那麼我們就需要在switch裡再新增乙個case,這不就修改類了?不就違背了開放-封閉原則(簡單工廠模式)???
所以,工廠方法模式就來了。
我們先來明確工廠方法模式的定義:
工場方法模式:定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類。工場方法使乙個類的例項化延遲到其子類。
我們來看一下工廠方法模式的結構圖:
既然這個工廠類與分支耦合,那麼我們就對它下手,根據依賴倒轉原則,我們把工廠類抽象出乙個介面,這個介面只有乙個方法,就是建立抽象產品的工廠方法。然後,所有的要產生的具體類的工廠,就去實現這個介面,這樣,乙個簡單工場模式的工廠類,變成了乙個工場抽象介面和多個具體生成物件的工廠了。
工廠方法模式實現時,客戶端需要決定例項化哪乙個工廠來實現運算類,選擇判斷問題還是存在的,也就是說,工廠方法把簡單工廠的內部邏輯判斷轉移到了客戶端**來進行。你想要加功能,本來是改工廠類的,而現在是修改客戶端!
大話設計模式 工廠方法模式
大話設計模式 雷鋒依然在人間 工廠方法模式 class leifeng public void wash public void buyrice 學雷鋒的大學生 class undergraduate extends leifeng 學雷鋒的社會志願者 class volunteer extends...
大話設計模式 工廠方法模式
一 工廠方法模式定義 定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類。工廠方法使乙個類的例項化延遲到其子類。二 工廠方法模式結構圖 三 工廠方法模式例項 簡單工廠模式的演算法,在增加新的演算法時,除了新增加演算法類,同時還需要修改工廠類。繼續完善,在增加新的演算法時,不修改工廠類,而是單獨修改...
大話設計模式 工廠方法模式
工廠方法 public inte ce ifactory 雷鋒 public class leifeng public void wash public void buyrice 學雷鋒的大學生 public class undergraduate extends leifeng 工廠方法生成學雷鋒...