設計模式 建立型模式之抽象工廠模式

2021-10-12 18:51:52 字數 1659 閱讀 1768

抽象工廠模式(abstract factory pattern)隸屬於設計模式中的建立型模式,用於產品族的構建。抽象工廠是所有形態的工廠模式中最為抽象和最具一般性的一種形態。抽象工廠是指當有多個抽象角色時使用的一種工廠模式。抽象工廠模式可以向客戶端提供乙個介面,使客戶端在不必指定產品的具體情況下,建立多個產品族中的產品物件。工廠模式中的每乙個形態都是針對一定問題的解決方案,工廠方法針對的是多個產品系列結構;而抽象工廠模式針對的是多個產品族結構,乙個產品族內有多個產品系列。

抽象工廠模式相對於工廠方法模式來說,就是工廠方法模式是針對乙個產品系列的,而抽象工廠模式是針對多個產品系列的,即工廠方法模式是乙個產品系列乙個工廠類,而抽象工廠模式是多個產品系列乙個工廠類。在抽象工廠模式中,客戶端不再負責物件的建立,而是把這個責任丟給了具體的工廠類,客戶端只負責對物件的呼叫,從而明確了各個類的職責。並且當一系列相互關聯的產品被設計到乙個工廠類裡後,客戶端的呼叫將會變得非常簡單,而且,如果要更換這一系列的產品,則只需要更換乙個工廠類即可。如果客戶端需要建立一些產品結構,而這些產品結構又分別屬於不同的產品類別,則可以使用抽象工廠模式,抽象工廠模式中抽象工廠類負責定義建立物件的介面,具體這一系列物件的建立工作由實現抽象工廠的具體工廠類來完成。

優點:

① 可以在類的內部對產品族中相關聯的多等級產品共同管理,而不必專門引入多個新的類來進行管理。

② 當需要產品族時,抽象工廠可以保證客戶端始終只使用同乙個產品的產品組。

③ 抽象工廠增強了程式的可擴充套件性,當增加乙個新的產品族時,不需要修改原**,滿足開閉原則。

缺點:

① 當產品族中需要增加乙個新的產品時,所有的工廠類都需要進行修改。增加了系統的抽象性和理解難度。

抽象工廠模式建議為系列中的每件產品明確宣告介面,確保所有產品變體都繼承這些介面。 例如,所有 concreteproducta 都實現 producta 介面;所有 concreteproductb 都實現 productb 介面,以此類推。接下來,宣告抽象工廠——包含系列中所有產品構造方法的介面。例如 createproducta 、createproductb。這些方法必須返回抽象產品型別,即我們之前抽取的那些介面: producta、productb 等等。那麼該如何處理產品變體呢?對於系列產品的每個變體,我們都將基於抽象工廠介面建立不同的工廠類。每個工廠類都只能返回特定類別的產品,例如,concretefactory2 只能建立 concreteproducta2 、concreteproductb2 物件。

客戶端**可以通過相應的抽象介面呼叫工廠和產品類。無需修改實際客戶端**,就能更改傳遞給客戶端的工廠類,也能更改客戶端**接收的產品變體。假設客戶端想要工廠建立 producta。客戶端無需了解工廠類,也不用管工廠類建立出的 producta 型別。無論是 producta1 還是 producta2 的 producta,對於客戶端來說沒有分別,它只需呼叫抽象 producta 介面就可以了。這樣一來,客戶端只需知道 producta 以某種方式實現了其方法就足夠了。此外,無論工廠返回的是何種 producta 變體,它都會和由同一工廠建立 productb 風格一致。

設計模式 建立型模式之抽象工廠模式

抽象工廠模式是工廠模式中最抽象的乙個工廠模式,引入的產品組的概念,對它的定義就是將一組相關或相互依賴的物件提供介面,而不需要具體的物件,這個定義是很抽象的。抽象工廠模式包括的角色 1.抽象工廠類 宣告一組用於建立一種產品的的方法 2.具體工廠類 繼承了抽象工廠類,建立一組具體產品的物件 3.抽象產品...

設計模式 抽象工廠 建立型模式

介紹了簡單工廠與工廠方法之後,現在我們來看一下工廠三兄弟的最後乙個 抽象工廠。那什麼是抽象工廠呢?抽象工廠模式 abstract factory pattern 提供乙個建立一系列相關或相互依賴物件 的介面,而無須指定它們具體的類。抽象工廠模式又稱為kit模式,屬於物件建立型模式。說起來,抽象工廠與...

設計模式 建立型模式 工廠模式,抽象工廠模式

簡單工廠模式不是 23 種裡的一種,簡而言之,就是有乙個專門生產某個產品的類。它只算工廠模式的乙個特殊實現。簡單工廠模式在實際中的應用相對於其他2個工廠模式用的還是相對少得多,因為它只適應很多簡單的情況。1 建立shape介面 public inte ce shape 2 建立實現該介面的具體圖形類...