什麼是工廠模式

2021-09-11 17:33:28 字數 1661 閱讀 9817

三種工廠模式的分析以及c++實現

以下是我自己學習設計模式的思考總結。

簡單工廠模式

用簡單的話來說,工廠模式是工廠模式簡單的一種,他可以用一些簡單的方法去隱藏物件的細節,一般只需告訴工廠類所需的型別就可以,工廠類會返回你需要的產品類,但你在客戶端看到的只是產品的抽象物件,不需要關心返回是什麼類。客戶端唯一知道的就是具體子類,也就是工廠子類。除了這一點,基本是達到依賴倒轉原則的要求罷了!

如果我們不去用工廠類,那客戶端會每次使用不同的子類的時候,都需要知道到底是用哪乙個類,要是累比較少,那沒有什麼為題。但是當模擬較多的時候,管理起來會非常麻煩,就需要做大量的替換,可能還會發生錯誤。如果使用工廠類之後,就不會發生這種問題了,不管裡面有多少類,我們需要知道型別號就可以了。所以簡單工廠模式一般應該於程式中大部分地方都只使用其中一種產品,工廠類也不用頻繁建立產品類的情況。

優點1.隱藏了物件建立的細節,將產品的例項推遲到子類中去。

2.客戶端無需關心使用時哪乙個產品,只需要知道用哪乙個工廠就行了,提供的型別也可以用比較便於識別的字串。

3.方便新增到新的產品子類中,每次字需要修改工廠傳遞的型別值就可以了。

4.遵循了依賴倒轉的原則。

缺點1.要求產品子類的型別差不多,使用的方法都相同,如果累比較多一些的話,所有的類又要新增到一種方法,則會是非常麻煩的事情。或者還有一種,就是一種類另一種類有幾種方法不一樣,客戶端無法找到是哪乙個子類,也不能去呼叫這幾個不同的方法了。

工廠模式

工廠模式基本與簡單工廠模式差不多的,上面我也說了,每次新增乙個產品類都必須在工廠類中新增,這要違背了開放-封閉的原則 ,工廠模式就是為了解決這個問題而產生的。既然每次都要判斷,那我就把這些判斷都生成乙個工廠子類,這樣,每次新增產品子類的時候,只需再新增乙個工廠子類就可以了。這樣就完美的遵循了開放-封閉原則。但這其實也有問題,如果產品數量足夠多,要維護的量就會增加,好在一般工廠子類只用來生成產品類,只要產品子類的名稱不發生變化,那麼基本工廠子類就不需要修改,每次只需要修改產品子類就可以了。

同樣工廠模式一般應該於程式中大部分地方都只使用其中一種產品,工廠類也不用頻繁建立產品類的情況。這樣修改的時候只需要修改有限的幾個地方即可。

常用的場景

工廠模式與簡單工廠模式基本是一致的,有一寫不同就是改進了簡單工廠模式中的開發-封閉原則,使用工廠模式更具有彈性。將例項化的過程推遲到子類中,由子類決定例項化哪乙個。

優點基本與簡單工廠模式一致,多的一點優點就是遵循了開放-封閉原則,使得模式的靈活性更強。

缺點與簡單工廠模式差不多。

抽象工廠模式

抽象工廠模式就變得比工廠模式更為複雜,就像上面提到的缺點一樣,工廠模式和簡單工廠模式要求產品子類必須要是同一型別的,擁有共同的方法,這就限制了產品子類的擴充套件。於是為了更加方便的擴充套件,抽象工廠模式就將同一類的產品子類歸為一類,讓他們繼承同乙個抽象子類,我們可以把他們一起視作一組,然後好幾組產品構成一族。

優點1.封裝了產品的建立,使得不需要知道具體是哪種產品,只需要知道是哪個工廠就行了。

2.可以支援不同型別的產品,使得模式靈活性更強。

3.可以非常方便的使用一族中間的不同型別的產品。

缺點

1.結構太過臃腫,如果產品型別比較多,或者產品族模擬較多,就會非常難於管理。

2.每次如果新增一組產品,那麼所有的工廠類都必須新增乙個方法,這樣違背了開放-封閉原則。所以一般適用於產品組合產品族變化不大的情況。

什麼是工廠模式

1 傳授設計模式中存在的問題 我個人最近對設計模式中的工廠模式進行了比較深入的學習,通過學習感悟出,現在很多設計模式傳道者,在講述設計模式的過程中存在一些問題,使得設計模式變得很難理解。設計模式本身很抽象,但是這些傳道者在講述的過程中,將乙個抽象的東西講的更抽象,從而使我們望而卻步。有些人在講述的時...

什麼是工廠模式

1.工廠模式具體包括了簡單工廠 工廠方法 抽象工廠,它們是按照從簡單到複雜的順序排列的,屬於設計模式中的建立型,其中簡單工廠並不屬於gof的23中模式。但是它是理解其它的工廠模式的乙個很好的基礎,所以很多人在講述設計模式的時候會提到簡單工廠模式。建立型模式關注的是物件的建立,建立型模式將建立物件的過...

什麼是工廠模式 Factory

世界上並沒有完美的程式,但是我們並不因此而沮喪,因為寫程式就是乙個不斷追求完美的過程。意圖提供乙個建立物件的介面,根據需求建立不同的子類物件 類圖 例項 inte ce obj class obj1 implements obj class obj2 implements obj class obj...