1.簡(jiǎn)介
抽象工廠模式(Abstract Factory Pattern)是圍繞一個(gè)超級(jí)工廠創(chuàng)建其他工廠。該超級(jí)工廠又稱為其他工廠的工廠鸳慈。這種類型的設(shè)計(jì)模式屬于創(chuàng)建型模式饱溢,它提供了一種創(chuàng)建對(duì)象的最佳方式。
在抽象工廠模式中走芋,接口是負(fù)責(zé)創(chuàng)建一個(gè)相關(guān)對(duì)象的工廠绩郎,不需要顯式指定它們的類。每個(gè)生成的工廠都能按照工廠模式提供對(duì)象翁逞。
2.場(chǎng)景
- 服裝店中的衣服肋杖,比如說(shuō)有商務(wù)裝(成套,一系列具體產(chǎn)品)熄攘、時(shí)尚裝(成套兽愤,一系列具體產(chǎn)品),甚至可能有商務(wù)女裝挪圾、商務(wù)男裝浅萧、時(shí)尚女裝、時(shí)尚男裝哲思,這些也都是成套的洼畅,即一系列具體產(chǎn)品。假設(shè) 某一個(gè)衣柜(具體工廠)只能存放某一種這樣的衣服(成套棚赔,一系列具體產(chǎn)品)帝簇,每次拿這種成套的衣服時(shí)也自然要從這個(gè)衣柜中取出了。所有的衣柜(具體工廠)都是衣柜類的(抽象工廠)某一個(gè)靠益,而每一件成套的衣服又包括具體的上衣(某一具體產(chǎn)品)丧肴,褲子(某一具體產(chǎn)品),這些具體的上衣其實(shí)也都是上衣(抽象產(chǎn)品)胧后,具體的褲子也都是褲子(另一個(gè)抽象產(chǎn)品)芋浮。
- 數(shù)據(jù)庫(kù)(抽象工廠),下面有mysql,oracle(具體工廠)壳快,抽象工廠生產(chǎn)user,dept(抽象產(chǎn)品)兩種纸巷,mysql具體工廠生產(chǎn)m-user和m-dept兩種具體產(chǎn)品,oracle具體工廠生產(chǎn)o-user和o-dept兩種具體產(chǎn)品眶痰。以后如果需要用mysql數(shù)據(jù)庫(kù)瘤旨,那么就生產(chǎn)mysql工廠生產(chǎn)的產(chǎn)品。
- 抽象工廠模式也就是不僅生產(chǎn)鼠標(biāo)竖伯,同時(shí)生產(chǎn)鍵盤(pán)存哲。也就是 PC 廠商是個(gè)父類因宇,有生產(chǎn)鼠標(biāo),生產(chǎn)鍵盤(pán)兩個(gè)接口宏胯。戴爾工廠羽嫡,惠普工廠繼承它,可以分別生產(chǎn)戴爾鼠標(biāo)+戴爾鍵盤(pán)肩袍,和惠普鼠標(biāo)+惠普鍵盤(pán)。創(chuàng)建工廠時(shí)婚惫,由戴爾工廠創(chuàng)建氛赐。后續(xù)工廠.生產(chǎn)鼠標(biāo)()則生產(chǎn)戴爾鼠標(biāo),工廠.生產(chǎn)鍵盤(pán)()則生產(chǎn)戴爾鍵盤(pán)先舷。
3. 抽象工廠模式模型圖
1530601916-7298-DP-AbstractFactory.png
4. 抽象工廠模式代碼實(shí)現(xiàn)
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
5. 抽象工廠模式和工廠方法模式區(qū)分
只有一個(gè)user類和user操作類的時(shí)候艰管,是需要工廠方法模式,如果加上dept等等蒋川,就形成了抽象工廠方法模式牲芋。