鍍金池/ 教程/ Java/ 工廠三兄弟之抽象工廠模式(二)
工廠三兄弟之抽象工廠模式(五)
復(fù)雜對象的組裝與創(chuàng)建——建造者模式(一)
工廠三兄弟之工廠方法模式(一)
復(fù)雜對象的組裝與創(chuàng)建——建造者模式(二)
確保對象的唯一性——單例模式 (二)
工廠三兄弟之簡單工廠模式(四)
確保對象的唯一性——單例模式 (一)
工廠三兄弟之工廠方法模式(四)
對象的克隆——原型模式(一)
工廠三兄弟之抽象工廠模式(二)
工廠三兄弟之工廠方法模式(三)
工廠三兄弟之抽象工廠模式(一)
工廠三兄弟之抽象工廠模式(四)
確保對象的唯一性——單例模式 (三)
工廠三兄弟之簡單工廠模式(三)
對象的克隆——原型模式(二)
復(fù)雜對象的組裝與創(chuàng)建——建造者模式(三)
對象的克隆——原型模式(四)
確保對象的唯一性——單例模式(四)
工廠三兄弟之簡單工廠模式(一)
工廠三兄弟之簡單工廠模式(二)
對象的克隆——原型模式(三)
工廠三兄弟之抽象工廠模式(三)
確保對象的唯一性——單例模式(五)
工廠三兄弟之工廠方法模式(二)

工廠三兄弟之抽象工廠模式(二)

產(chǎn)品等級結(jié)構(gòu)與產(chǎn)品族

在工廠方法模式中具體工廠負(fù)責(zé)生產(chǎn)具體的產(chǎn)品,每一個具體工廠對應(yīng)一種具體產(chǎn)品,工廠方法具有唯一性,一般情況下,一個具體工廠中只有一個或者一組重載的工廠方法。但是有時候我們希望一個工廠可以提供多個產(chǎn)品對象,而不是單一的產(chǎn)品對象,如一個電器工廠,它可以生產(chǎn)電視機(jī)、電冰箱、空調(diào)等多種電器,而不是只生產(chǎn)某一種電器。為了更好地理解抽象工廠模式,我們先引入兩個概念:

(1) 產(chǎn)品等級結(jié)構(gòu):產(chǎn)品等級結(jié)構(gòu)即產(chǎn)品的繼承結(jié)構(gòu),如一個抽象類是電視機(jī),其子類有海爾電視機(jī)、海信電視機(jī)、TCL 電視機(jī),則抽象電視機(jī)與具體品牌的電視機(jī)之間構(gòu)成了一個產(chǎn)品等級結(jié)構(gòu),抽象電視機(jī)是父類,而具體品牌的電視機(jī)是其子類。

(2) 產(chǎn)品族:在抽象工廠模式中,產(chǎn)品族是指由同一個工廠生產(chǎn)的,位于不同產(chǎn)品等級結(jié)構(gòu)中的一組產(chǎn)品,如海爾電器工廠生產(chǎn)的海爾電視機(jī)、海爾電冰箱,海爾電視機(jī)位于電視機(jī)產(chǎn)品等級結(jié)構(gòu)中,海爾電冰箱位于電冰箱產(chǎn)品等級結(jié)構(gòu)中,海爾電視機(jī)、海爾電冰箱構(gòu)成了一個產(chǎn)品族。

產(chǎn)品等級結(jié)構(gòu)與產(chǎn)品族示意圖如圖所示:

http://wiki.jikexueyuan.com/project/design-pattern-creation/images/20130713162941328.jpg" alt="產(chǎn)品族與產(chǎn)品等級結(jié)構(gòu)示意圖" />

在圖中,不同顏色的多個正方形、圓形和橢圓形分別構(gòu)成了三個不同的產(chǎn)品等級結(jié)構(gòu),而相同顏色的正方形、圓形和橢圓形構(gòu)成了一個產(chǎn)品族,每一個形狀對象都位于某個產(chǎn)品族,并屬于某個產(chǎn)品等級結(jié)構(gòu)。圖3中一共有五個產(chǎn)品族,分屬于三個不同的產(chǎn)品等級結(jié)構(gòu)。我們只要指明一個產(chǎn)品所處的產(chǎn)品族以及它所屬的等級結(jié)構(gòu),就可以唯一確定這個產(chǎn)品。

當(dāng)系統(tǒng)所提供的工廠生產(chǎn)的具體產(chǎn)品并不是一個簡單的對象,而是多個位于不同產(chǎn)品等級結(jié)構(gòu)、屬于不同類型的具體產(chǎn)品時就可以使用抽象工廠模式。抽象工廠模式是所有形式的工廠模式中最為抽象和最具一般性的一種形式。抽象工廠模式與工廠方法模式最大的區(qū)別在于,工廠方法模式針對的是一個產(chǎn)品等級結(jié)構(gòu),而抽象工廠模式需要面對多個產(chǎn)品等級結(jié)構(gòu),一個工廠等級結(jié)構(gòu)可以負(fù)責(zé)多個不同產(chǎn)品等級結(jié)構(gòu)中的產(chǎn)品對象的創(chuàng)建。當(dāng)一個工廠等級結(jié)構(gòu)可以創(chuàng)建出分屬于不同產(chǎn)品等級結(jié)構(gòu)的一個產(chǎn)品族中的所有對象時,抽象工廠模式比工廠方法模式更為簡單、更有效率。抽象工廠模式示意圖如圖所示:

http://wiki.jikexueyuan.com/project/design-pattern-creation/images/20130713163008609.jpg" alt="抽象工廠模式示意圖" />

在圖中,每一個具體工廠可以生產(chǎn)屬于一個產(chǎn)品族的所有產(chǎn)品,例如生產(chǎn)顏色相同的正方形、圓形和橢圓形,所生產(chǎn)的產(chǎn)品又位于不同的產(chǎn)品等級結(jié)構(gòu)中。如果使用工廠方法模式,圖所示結(jié)構(gòu)需要提供 15 個具體工廠,而使用抽象工廠模式只需要提供 5 個具體工廠,極大減少了系統(tǒng)中類的個數(shù)。