抽象工廠模式 產品等級結構與產品族

2021-09-11 03:53:38 字數 1431 閱讀 4758

在工廠方法模式中具體工廠負責生產具體的產品,每乙個具體工廠對應一種具體產品,工廠方法具有唯一性,一般情況下,乙個具體工廠中只有乙個或者一組過載的工廠方法。但是有時候我們希望乙個工廠可以提供多個產品物件,而不是單一的產品物件,如乙個電器工廠,它可以生產電視機、電冰箱、空調等多種電器,而不是只生產某一種電器。為了更好地理解抽象工廠模式,我們先引入兩個概念:

(1)產品等級結構產品等級結構即產品的繼承結構,如乙個抽象類是電視機,其子類有海爾電視機、海信電視機、tcl電視機,則抽象電視機與具體品牌的電視機之間構成了乙個產品等級結構,抽象電視機是父類,而具體品牌的電視機是其子類。

(2)產品族:在抽象工廠模式中,產品族是指由同乙個工廠生產的,位於不同產品等級結構中的一組產品,如海爾電器工廠生產的海爾電視機、海爾電冰箱,海爾電視機位於電視機產品等級結構中,海爾電冰箱位於電冰箱產品等級結構中,海爾電視機、海爾電冰箱構成了乙個產品族。

產品等級結構與產品族示意圖如圖3所示:

圖3  產品族與產品等級結構示意圖

在圖3中,不同顏色的多個正方形、圓形和橢圓形分別構成了三個不同的產品等級結構,而相同顏色的正方形、圓形和橢圓形構成了乙個產品族,每乙個形狀物件都位於某個產品族,並屬於某個產品等級結構。圖3中一共有五個產品族,分屬於三個不同的產品等級結構。我們只要指明乙個產品所處的產品族以及它所屬的等級結構,就可以唯一確定這個產品。

當系統所提供的工廠生產的具體產品並不是乙個簡單的物件,而是多個位於不同產品等級結構、屬於不同型別的具體產品時就可以使用抽象工廠模式。抽象工廠模式是所有形式的工廠模式中最為抽象和最具一般性的一種形式。抽象工廠模式與工廠方法模式最大的區別在於,工廠方法模式針對的是乙個產品等級結構,而抽象工廠模式需要面對多個產品等級結構,乙個工廠等級結構可以負責多個不同產品等級結構中的產品物件的建立。當乙個工廠等級結構可以建立出分屬於不同產品等級結構的乙個產品族中的所有物件時,抽象工廠模式比工廠方法模式更為簡單、更有效率。抽象工廠模式示意圖如圖4所示:

圖4 抽象工廠模式示意圖

在圖4中,每乙個具體工廠可以生產屬於乙個產品族的所有產品,例如生產顏色相同的正方形、圓形和橢圓形,所生產的產品又位於不同的產品等級結構中。如果使用工廠方法模式,圖4所示結構需要提供15個具體工廠,而使用抽象工廠模式只需要提供5個具體工廠,極大減少了系統中類的個數。

抽象工廠模式 產品等級與產品族的糾纏

工廠方法模式中的每個具體工廠只有乙個或者一組過載的工廠方法,只能生產一種產品,可能會導致系統中存在大量的工廠類,會增加系統的開銷。有時候需要工廠可以提供多種產品物件,而不是單一的產品物件。例如乙個電器工廠,它可以生產電視 電冰箱 洗衣機 空調之類的。這時候就可以將一些相關產品組成乙個產品族,由乙個工...

工廠方法模式 抽象工廠與抽象產品的結合

工廠方法模式是在簡單工廠模式上再加了一層,新增了乙個抽象工廠和具體工廠。即不再使用乙個工廠類來統一負責所有產品的建立,而是把建立具體產品的任務交給了專門的工廠子類去完成。比如說,我要生產矩形 圓形 菱形這三種形狀,就不再使用乙個工廠了,而是讓矩形工廠 圓形工廠 菱形工廠去完成,而這三個工廠又是形狀工...

工廠模式與抽象工廠模式

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