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

2021-08-09 19:39:10 字數 990 閱讀 1117

我們先來回顧一下簡單工廠模式

這是我的關於工廠模式的部落格,裡面有乙個關於運算的例題,我們今天還是用這個例題。

簡單工廠模式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 工廠方法生成學雷鋒...