設計模式 工廠模式與抽象工廠模式的區別

2021-08-21 11:52:13 字數 945 閱讀 6043

首先來看看這兩者的定義區別:

工廠模式:定義乙個用於建立物件的藉口,讓子類決定例項化哪乙個類

抽象工廠模式:為建立一組相關或相互依賴的物件提供乙個介面,而且無需指定他們的具體類

個人覺得這個區別在於產品,如果產品單一,最合適用工廠模式,但是如果有多個業務品種、業務分類時,通過抽象工廠模式產生需要的物件是一種非常好的解決方式。再通俗深化理解下:工廠模式針對的是乙個產品等級結構 ,抽象工廠模式針對的是面向多個產品等級結構的。

再來看看工廠方法模式與抽象工廠模式對比:

工廠方法模式

抽象工廠模式

針對的是乙個產品等級結構

針對的是面向多個產品等級結構

乙個抽象產品類

多個抽象產品類

可以派生出多個具體產品類

每個抽象產品類可以派生出多個具體產品類

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

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

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

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

舉個例子說明下:

用種蔬菜的例子來說明事實,最初的時候,由於規模小,只種植一種蔬菜,根菜類蔬菜,這個時候由於種植方式比較簡單,採用簡單工廠模式即可,主要目的是讓工人輕鬆,下達工廠種植即可,但是隨著種植廠的發展以及市場的需求,要增加一種蔬菜型別種植了,莖菜,由於莖菜與根菜種植方式不一致,就需要兩個專門的種植工廠來進行管理,那麼久採用工廠模式來管理,乙個工廠負責一種作物的種植,這個時候產品可以理解為仍然在乙個層次。但是隨著科技的發展,我們逐步要種植轉基因與非轉基因食品了,在以前的蔬菜種類上又增加了乙個層次,這個時候無法將其作為乙個層次來解決,所以必須採用抽象工廠的方式來解決。我用uml圖表示三種結構:

而在沒乙個層次,種菜工人所關心的物件也不一樣,在簡單工廠模式下,工人要想到種植蘿蔔還是白菜,在工廠模式下,工人想到是種植根菜還是莖菜,而在抽象工廠模式下,則關心種植基因菜還是非基因菜

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

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

設計模式(簡單工廠模式 工廠模式 抽象工廠模式)

當邏輯較為簡單時,可以直接建立對應的類。如下 include using namespace std class class banana class pear intmain 通過此 可以發現,使用者直接與客戶接觸,違背了dip 依賴倒轉 原則,過於麻煩,所以引出簡單工廠模式。include us...

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

提供乙個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類。在工廠方法模式中,我們的具體建立者每次使用都只能建立乙個同型別的物件,假如我們現在需要的是多個不同型別的物件,工廠方法就滿足不了需求了。這時我們可以把多個工廠方法組合到乙個類,這就是抽象工廠模式,它就是專門用來建立多個產品,也可以說...