工廠方法模式 雷鋒在人間

2021-10-25 16:20:42 字數 1753 閱讀 8271

工廠方法模式

對比兩個模式

乙個簡單地加減乘除類

結構圖:

只要輸入運算符號,工廠就可以例項化出乙個合適的物件,通過多型,返回父類的方式實現了計算器的結果。

如果需要更改加法運算,直接更改operationadd就可以。

如果增加其他運算,只要增加相應的運運算元類就可以了。

如果需要修改運算類工廠,只需要在switch中增加分支。

簡單工廠模式的最大優點在於工廠類中包含了必要的邏輯判斷,根據客戶端的選擇條件動態例項化相關的類,對於客戶端來說,去除了與具體產品的依賴。

工廠方法模式:

定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類。工廠方法使乙個類的例項化延遲到其子類。

結構圖

對於上面的加減乘除的工廠方法

工廠類與分支耦合,根據依賴倒轉原則,把工廠抽象出乙個介面,這個介面只有乙個方法,那就是建立抽象產品的工廠方法,然後,所有的要生產具體類的工廠,就去實現這個介面,這樣,乙個簡單工廠模式的工廠類,就變成了乙個工廠抽象介面和多個具體生成物件的工廠,這樣在增加「求m數的n次方」的功能時,不需要更改原有的工廠類,只需要增加此功能的運算類和相應的工廠類就可以了。這樣比較符合開閉原則

加減乘除的類圖:

存在的問題:

工廠方法模式實現時,客戶端需要決定例項化哪乙個工廠來實現運算類,選擇判斷的問題還是存在的,也就是說,工廠方法把簡單工廠的內部邏輯判斷移到了客戶端**來進行,你想要加功能,本來是改工廠類的,現在是修改客戶端的。

雷鋒工廠

幫助孤寡老人的類叫雷鋒類,雷鋒需要做的是掃地 洗衣 買公尺等活動。雷鋒可以是大學生也可以是社群志願者,但是老人只知道「雷鋒」,所以這裡就讓大學生和社群志願者繼承雷鋒類,來幫助孤寡老人。

雷鋒類

namespace 雷鋒工廠

public

void

wash()

public

void

buyrice()

}}

雷鋒工廠的介面;

//定義乙個雷鋒工廠的介面

//雷鋒工廠

inte***ce

ifactory

學雷鋒的大學生工廠

//學雷鋒的大學生工廠

///

/// 繼承雷鋒工廠的方法

///

class

undergraduatefactory

:ifactory

}

社群志願者工廠:

//社群志願者工廠

class

voluntee***ctory

:ifactory

}

客戶端**:

namespace 雷鋒工廠

}}

工廠方法克服了簡單工廠違背開閉原則的缺點,保持了封裝物件建立過程的優點。他們都是集中封裝了物件的建立,使得要更換物件時,不需要做大的改動就可以實現,降低了客戶程式與產品物件的耦合。

工廠方法模式是簡單工廠模式的進一步抽象和推廣。由於使用了多型性,工廠方法模式保持了簡單工廠模式的優點,並且克服了他的優點,但是缺點是由於每加乙個產品,就需要加乙個產品工廠的類,增加了額外的開發量。而且這裡還是修改了客戶端的**。

工廠方法模式Python版 雷鋒依然在人間

工廠方法模式定義了乙個用於建立物件的介面,讓子類決定例項化哪乙個類,factory method使乙個雷的例項化延遲到其子類。工廠方法模式的本質就是延遲到子類來選擇是實現。實現 class operationfactory operators operators operationadd opera...

大話設計模式八 工廠方法模式(雷鋒依然在人間)

工廠方法模式是簡單工廠模式的抽象和擴充套件。工廠方法模式是由客戶端來決定例項化那乙個工廠實現類。在簡單工廠類中如果要增加功能改動的是工廠類,但在工廠方法模式中要改的就是客戶端了,由客戶端決定 package factory public class mainclass private static ...

第八章 雷鋒依然在人間 工廠方法模式 讀書筆記

雷鋒依然在人間 工廠方法模式 1.簡單工廠模式的最大優點在於工廠類中包含了必要的邏輯判斷,根據客戶端的選擇條件動態例項化相關的類,對於客戶端來說,去除了與具體產品的依賴。2.工廠方法模式 factory method 定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類。工廠方法使乙個類的例項化延遲...