工廠模式與抽象工廠模式的相關概念

2021-10-07 00:07:49 字數 3233 閱讀 6660

工廠模式

1> 定義:

定義乙個建立產品物件的工廠介面,將產品物件的實際建立工作推遲到具體子工廠類當中。這滿足建立型模式中所要求的「建立與使用相分離」的特點。

2> 主要優點:

使用者只需要知道具體工廠的名稱就可得到所要的產品,無須知道產品的具體建立過程;

在系統增加新的產品時只需要新增具體產品類和對應的具體工廠類,無須對原工廠進行任何修改,滿足開閉原則;

3> 缺點:

每增加乙個產品就要增加乙個具體產品類和乙個對應的具體工廠類,這增加了系統的複雜度。

4> 結構:

工廠方法模式由抽象工廠、具體工廠、抽象產品和具體產品等4個要素構成。(1)工廠模式的結構

工廠方法模式的主要角色如下:

(1)抽象工廠(abstract factory):提供了建立產品的介面,呼叫者通過它訪問具體工廠的工廠方法newproduct() 來建立產品。

(2)具體工廠(concretefactory):主要是實現抽象工廠中的抽象方法,完成具體產品的建立。

(3)抽象產品(product):定義了產品的規範,描述了產品的主要特性和功能。

(4)具體產品(concreteproduct):實現了抽象產品角色所定義的介面,由具體工廠來建立,它同具體工廠之間一一對應。

其結構圖如圖 1 所示。

圖1 工廠模式結構圖

抽象工廠模式

1> 定義:

是一種為訪問類提供乙個建立一組相關或相互依賴物件的介面,且訪問類無須指定所要產品的具體類就能得到同族的不同等級的產品的模式結構。

2> 結構:

抽象工廠模式的主要角色如下。

(1)抽象工廠(abstract factory):提供了建立產品的介面,它包含多個建立產品的方法 newproduct(),可以建立多個不同等級的產品。

(2)具體工廠(concrete factory):主要是實現抽象工廠中的多個抽象方法,完成具體產品的建立。

(3)抽象產品(product):定義了產品的規範,描述了產品的主要特性和功能,抽象工廠模式有多個抽象產品。

(4)具體產品(concreteproduct):實現了抽象產品角色所定義的介面,由具體工廠來建立,它同具體工廠之間是多對一的關係。

抽象工廠模式的結構圖如圖2所示。

圖2 抽象工廠模式結構圖

四、實驗步驟

1、factory模式

factory模式的作用:定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類。factory method使乙個類的例項化延遲到其子類。

該例項的uml 結構圖如圖3所示。

圖3 工廠模式例項-汽車工廠的uml圖

該uml圖對應工廠模式的結構如下:

抽象工廠:ca***ctory:提供了建立產品的介面(或抽象類)。

具體工廠:aca***ctory和bfactory:主要是實現抽象工廠中的多個抽象方法,完成具體產品的建立。

抽象產品:car:定義了產品的規範,描述了產品的主要特性和功能。

具體產品:acar和bcar:實現了抽象產品角色所定義的介面(或抽象類)。

在這個模式中,有兩個抽象類,乙個是car,它是產品的抽象基類,乙個是ca***ctory是工廠的抽象基類,在互相協作的時候都是由相應的ca***ctory派生類來生成car的派生類,也就是說如果要新增一種car那麼也要對應的新增乙個對應的ca***ctory,建立的過程委託給了這個ca***ctory,也就是說乙個ca***ctory和乙個car是一一對應的關係。

2、abstract factory模式

abstract factory模式的作用:提供乙個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類。

該例項的uml結構圖如圖4所示:

圖4 抽象工廠模式例項-汽車手機工廠的uml圖

抽象類:

(1) 抽象產品:car,phone:分別代表不同型別的產品,定義了產品的規範,描述了產品的主要特性和功能。

(2) 抽象工廠:effactory:生產這一系列產品的乙個抽象工廠,提供了建立產品的介面,它包含多個建立產品的方法,可以建立多個不同等級的產品。

(3)具體產品:aphone,acar,bphone,bcar:實現了抽象產品角色所定義的介面(或抽象類)。

(4)具體工廠:afactory、bfactory:主要是實現抽象工廠中的多個抽象方法,完成具體產品的建立。

其中抽象方法:effactory.producecar,effactory.producephone:分別是生產不同產品的不同的實現,由各個派生出來的抽象工廠實現之。

abstract factory 模式和factory最大的差別就是抽象工廠建立的是一系列相關的物件,其中建立的實現其實採用的就是factory模式的方法,對於某個實現有乙個派生出來的抽象工廠,另乙個實現有另乙個派生出來的工廠等等。

抽象工廠需要特別注意的地方就是區分不同型別的產品和這些產品的不同實現。顯而易見的,如果有n種產品同時有m中不同的實現,那麼根據乘法原理可知有n*m個factory模式的使用。

總結:1、如果沒有應對「多系列物件構建」的需求變化,則沒有必要使用abstract factory模式,這是要使用工廠方法即可。「系列物件」指的是某一特定系列下的物件之間有相互依賴或作用的關係。不同系列的物件之間不能相互依賴。abstract factory模式主要在於應對「新系列」的需求變動。其缺點在於難以應對「新物件」的需求變動。

2、工廠模式的適用場景:

乙個系統應當不依賴於產品類例項被創立,組成,和表示的細節。這對於所有形態的工廠模式都是重要的。這個系統的產品有至少乙個的產品族。同屬於同一產品族的產品是設計成在一起使用的,這一約束必須得在系統的設計中體現出來。不同的產品以一系列的介面的面貌出現,從而使系統不依賴與介面實現的細節。

3、工廠模式與抽象工廠模式的對比:

(1)工廠模式是一種極端情況下的抽象工廠模式,而抽象工廠模式可以看成是工廠模式的推廣。

(2)工廠模式用來建立乙個產品的等級結構,而抽象工廠模式是用來建立多個產品的等級結構。

(3)工廠模式只有乙個抽象產品類,而抽象工廠模式有多個抽象產品類。

工廠模式與抽象工廠模式

原始出處 作者資訊和本宣告。否則將追究法律責任。工廠模式與抽象工廠模式,相信同行不會陌生 在網上及相關書裡面也看過這方面的介紹 推薦這兩本書 steven john metsker s design patterns in c 和 gof s design pattern framework2.0 ...

工廠模式與抽象工廠模式

1 工廠模式 定義了一組建立物件的介面,但是由子類決定要例項化的類是哪乙個。工廠方法把類的例項化推遲到子類中。現在考慮有pizzastore有一些子類 加盟店 他們有可能對pizza的做法進行一些改良,即createpizza方法需要公升級。工廠方法的做法是,在基類中建立乙個形為abstract p...

抽象工廠模式 抽象工廠模式

抽象工廠模式其實是圍繞了乙個超級工廠建立其他的工廠 可參考工廠模式 這個超級工廠又可以想像成是其他工廠的工廠,這種設計模式是一種建立型模式。在抽象工廠模式中,介面是負責建立乙個相關物件的工廠,不需要顯式指出其類。每個生成的工廠都能按照工廠模式提供物件。意圖提供乙個建立一系列相關或相互依賴物件的介面,...