對工廠方法模式學習的筆記

2021-07-12 07:36:06 字數 1869 閱讀 9032

工廠方法模式

工廠模式不在工廠中產生具體的物件例項,而是在子類中進行例項化工作。工廠方法模式的主要關係是「工廠-- 產品」之間的關係,工廠和產品,首先進行抽象化,例如抽象為生產刀具的工廠和刀具,這兩者皆為抽象的物件,抽象的工廠與產品之間,使用介面作為聯絡的紐帶,這樣可以新增系統的可拓展性以及可維護性。

引用學習書中的一張圖來說明該模式的結構

抽象工廠生產抽象產品;具體工廠生產具體產品;

抽象實現為具體。

通過實現抽象工廠的介面,可以在不影響其他已經實現介面的情況下對工廠進行拓展,利用了物件導向的多型性。

使用場合:

1. 子型別很多,並且需要不斷新增不同子型別時;

2. 系統處於框架設計階段,還不知道需要例項化那些具體類時;

3.  系統設計初不需要具體物件的概念。

開閉原則的應用:

開閉原則主要是指軟體系統實體對擴充套件開放,對修改關閉。主要就是在設計乙個模組的時候,可以在不被修改的情況下進行擴充套件。

具體的產品由具體的工廠生產,其實就是將抽象的工廠和產品進行具體的例項化,之後由具體的工廠生產具體的產品。當然,假如我想生產新的產品呢?

這時候可以有2種方式,第乙個是,建立新的工廠,建立新的生產線,然後生產新的產品;第二個就是用老的工廠,更換產品線,生產新的產品。這2種方法,都沒有修改任何父類工廠中的**,他們的實現過程都是在子類中進行處理的,因此,保證了軟體系統的穩定性。

面向抽象層程式設計的應用:

如上面說的開閉原則的例子中,假如我們直接採用在父類工廠中就定義了產品的生產方式,那麼,假如我們想更換新的產品,並且新產品和老產品差別很大時,我們就需要對父類工廠進行很大的修改,增加了軟體開發和維護的成本。

假如我們按照工廠模式進行設計,在子類中實現實現具體的工廠和具體的產品,那麼我們想更換產品的時候,只要生產的新產品依然遵循父類的抽象,這時候只需要對建立乙個新的子類進行實現即可,哪怕新的產品細節上與其他產品有很多不同,也不會對父類抽象造成任何影響,這樣就無需對父類進行改動,提高了模組的穩定性。

抽象工廠模式

抽象工廠模式和工廠方法模式類似,但是抽象工廠模式最大的區別在於抽象工廠模式的工廠可以可以建立多種產品,而工廠方法模式只能建立一種產品。

抽象工廠模式的用意為:給客戶端提供乙個介面,可以建立多個產品族中的產品物件。

使用場合

1.建立產品家族,相關產品集合在一起使用。

2.想要提供乙個產品類庫,並只想顯示其介面而不是實現。

3.通過組合的方式使用工廠時。

兩者區別

引用網上看到乙個結論:

工廠方法模式:乙個抽象產品類,可以派生出多個具體產品類。  

乙個抽象工廠類,可以派生出多個具體工廠類。  

每個具體工廠類只能建立乙個具體產品類的例項。  

抽象工廠模式:多個抽象產品類,每個抽象產品類可以派生出多個具體產品類。  

乙個抽象工廠類,可以派生出多個具體工廠類。  

每個具體工廠類可以建立多個具體產品類的例項。

引用一篇對工廠方法模式和抽象工廠模式說的很簡明的部落格

額外學習到的

額外學習到的一點,對於「多用物件組合,少用繼承」的設計原則,其特徵主要是在a類中,建立其他類的變數,在a類的建構函式或者set方法中,將例項化的類賦值給這些其他類變數。從而達到物件的組合。這樣的原則,可以使得系統結構更加具有靈活性,同時,也降低了繼承中基類對子類的巨大影響。

工廠方法模式 工廠方法模式

工廠方法模式是簡單工廠模式的公升級版,簡單工廠模式不符合設計模式的原則 即 單一職責,開閉原則 優點 職責明確,擴充套件方便 缺點 需要建立多個工廠 實現步驟 1.將工廠通用方法抽取介面 例如 ifactory 2.將產品抽取介面 例如 icar 3.實現各種產品 例如 baomacar,benti...

工廠方法模式 筆記

定義 工廠方法模式同樣屬於類的建立型模式,又名多型工廠模式,定義乙個建立產品物件的工廠介面,將實際的建立工作推遲到子類中去。主要角色及uml 抽象工廠角色 creator 工廠方法模式的核心,與應用程式無關 抽象產品角色 product 工廠方法所建立物件的超類 具體產品角色 concretepro...

學習筆記02 工廠方法模式

以下幾點能幫助理解工廠方法模式 定義乙個介面來建立物件,但是工廠本身並不負責建立物件,而是將這一任務交由子類來完成,即子類決定了要例項化哪些類 factory方法的建立是通過繼承而不是通過例項化來完成的 工廠方法使設計更加具有可定製性。它可以返回相同的例項或子類,而不是某種型別的物件。ps 可以理解...