設計模式 工廠模式

2021-08-07 21:21:00 字數 1804 閱讀 3665

工廠模式大致可以分為三類:

1、簡單工廠模式

2、工廠方法模式

3、抽象工廠模式。

這三種模式逐步抽象,並且更具有一般性。

工廠模式有一種非常形象的描述,建立物件的類就像乙個工廠,而需要被建立的物件就是乙個個產品,在工廠中加工產品,使用產品的人不用關心產品是如何生產出來的。在軟體中使用工廠模式的好處就是降低了模組之間的耦合。

一、簡單工廠模式

只要告訴工廠所需要的產品型別,工廠就會返回需要的產品物件

舉例:現在有乙個工廠生產a,b兩種型別的產品。使用工廠模式設計就是有乙個工廠

類factory,可以根據輸入的型別(typea,typeb)從而建立相應的a型別物件,b型別物件。

#include

using namespace std;

enum

;class product

;class producta:public product

}};int main()

**如上所示,可以看到使用簡單工廠模式的話統一了建立物件的介面,隱藏了建立物件的細節,只要知道產品的型別就可以建立出產品物件。

但是簡單工廠模式不易對產品進行擴充套件,比如現在又出來了一種c型別的產品,那要修改的地方就很多了,首先要新增乙個c型別的產品類,還有在工廠類中再新增乙個分支,這違背了開閉原則。

說白了,你的產品和工廠還是沒有完全解耦,繫結在一起的。

簡單工廠通過構造時傳入的標識來生產產品,不同產品都在同乙個工廠中生產,這種判斷會隨著產品的增加而增加,給擴充套件和維護帶來麻煩

二、工廠方法模式

工廠模式,在簡單工廠模式的基礎上,對工廠新增了乙個抽象層,將工廠的動作抽象出來,作為抽象類,而具體的行為由工廠類的子類去實現,讓工廠類的子類去決定生成什麼型別的產品。

舉例:現在有乙個工廠生產a,b兩種型別的產品。

與簡單工廠類似,首先定義乙個基類抽象產品類,定義兩個產品類a和b繼承基類產品。

在此基礎上,再定義個抽象工廠類,定義兩個工廠類繼承基類抽象工廠,各自實現建立產品。

#include

using namespace std;

class product

;class producta:public product

;class factorya:public factory

};class factoryb:public factory

};int main()

優點:當再增加乙個產品類c時,不必修改原來的**,只需要再增加乙個新的工廠子類就ok

缺點:生產的產品種類單一,只為一種品牌的產品提供介面。

比如說,工廠模式只能生產華為的手機和電腦,不能生產蘋果手機和電腦。

三、抽閒工廠模式

乙個工廠生產多種產品,它們是乙個產品族,不同的產品族的產品派生於不同的抽象產品(或產品介面)。

舉例:華為工廠生產華為的手機和電腦,蘋果工廠生產蘋果的手機和電腦。

**實現:

(1)定義乙個抽象手機類,再定義華為的手機類和蘋果的手機類繼承基類抽象手機類;

(2)定義乙個抽象電腦類,再定義華為的電腦類和蘋果的電腦類繼承基類抽象電腦類;

(3)定義乙個工廠抽象基類,再定義華為的工廠類繼承基類工廠,實現建立華為的手機和電腦;定義蘋果的工廠類繼承基類的工廠,實現建立蘋果的手機和電腦。

優缺點:

抽象工廠模式封裝了產品的建立,只要我們知道工廠就可以建立出一組產品。但是缺點也很明顯,比如新增乙個產品,要在每個工廠中再新增一種方法,違反了開閉原則。

設計模式 工廠模式 抽象工廠模式

建立物件時不會對客戶暴露建立邏輯,並且通過使用乙個共同的介面來指向建立的物件。sept1 建立乙個公共介面,將要對外開放的方法在這裡定義。sept2 建立實現介面的類,用即實現對外開放的類的方法 sept3 建立工廠,提供乙個get方法,這個方法提供返回實現類的物件 建立選擇 sept4 使用,建立...

設計模式 工廠設計模式

用於建立物件的介面,交給子類去實現 我們舉乙個生產nokia的例子 public abstract class nokiaphone先試定義了乙個抽象類,抽象出方法poweronphone 模擬手機開機的動作 public class nokia5200 extends nokiaphone pub...

設計模式 工廠設計模式

工廠模式分為工廠方法模式和抽象工廠模式 工廠方法模式分為 普通工廠模式,就是建立乙個工廠類,對實現了同一介面的一些類進行例項的建立。多個工廠方法模式,是對普通工廠方法模式的改進,在普通工廠方法模式中,如果傳遞的字串出錯,則不能正確建立物件,而多個工廠方法模式是提供多個工廠方法,分別建立物件。靜態工廠...