設(shè)計(jì)模式總結(jié)_第1頁
設(shè)計(jì)模式總結(jié)_第2頁
設(shè)計(jì)模式總結(jié)_第3頁
設(shè)計(jì)模式總結(jié)_第4頁
設(shè)計(jì)模式總結(jié)_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

本文格式為Word版,下載可任意編輯——設(shè)計(jì)模式總結(jié)注:

文檔內(nèi)容基本上來自于網(wǎng)上,并加上自己的理解而成。有的覺得網(wǎng)友總結(jié)得十分好,就完全照搬下來,供學(xué)習(xí)之用。然而,有的摘抄并沒有加上原鏈接和出處,請諒解。

AbstractFactory模式強(qiáng)調(diào)的是系列產(chǎn)品的替換,或者說系列產(chǎn)品的創(chuàng)立。抽像工廠和一般的工廠各有優(yōu)缺點(diǎn):

對于,普通工廠來說,我們是可以擴(kuò)展產(chǎn)品的(Product和ProductFactory),但是對于產(chǎn)生產(chǎn)品系列來說十分麻煩,會(huì)導(dǎo)致工廠泛濫。

對對,抽像工廠來說,對于產(chǎn)生產(chǎn)品系統(tǒng)十分便利,但對于產(chǎn)生產(chǎn)品品種來說,需要改動(dòng)的地方比較多。

(現(xiàn)在并沒有兼具普通工廠和抽像工廠的解決方案)Spring提供了一個(gè)簡單的解決方案:BeanFactory

\\

AbstractFactory模式(抽象工廠模式)(參考自:/woods2023/article/details/6655083)

抽象工廠,是簡單工廠和工廠方法的升級(jí)版。相比這兩個(gè)模式,抽象工

廠有這更大的靈活性,同時(shí)也更加繁雜一些。

抽象工廠模式的實(shí)質(zhì)是“提供接口,創(chuàng)立一系列相關(guān)或獨(dú)立的對象,而不指定這些對象的具體類。〞[1]

結(jié)構(gòu)

理解

1.AbstractFactory是抽象工廠類,聲明創(chuàng)立產(chǎn)品族的接口。具體工廠創(chuàng)立具體的產(chǎn)品族(ProductFamily),可以創(chuàng)立出分屬于不同產(chǎn)品等級(jí)的一個(gè)產(chǎn)品族中的所有對象。ConcreteFactory1和ConcreteFactory2分別生產(chǎn)2個(gè)不同產(chǎn)品族。(譬如游戲關(guān)卡里同一級(jí)別的不同怪物??)

舉例:手機(jī)工廠生產(chǎn)的產(chǎn)品族中,產(chǎn)品有Linux系統(tǒng)的手機(jī)和Windows系統(tǒng)的手機(jī)。PC工廠生產(chǎn)的產(chǎn)品族中,產(chǎn)品有Linux系統(tǒng)的PC和Windows系統(tǒng)的PC。(兩個(gè)產(chǎn)品族:手機(jī)產(chǎn)品族和PC產(chǎn)品族)

2.AbstractProductA和AbstractProductB是產(chǎn)品基類。它們的派生類是同產(chǎn)品等級(jí)結(jié)構(gòu)(產(chǎn)品類型)的具的體產(chǎn)品。

舉例:Linux的具體產(chǎn)品類型包括Linux手機(jī)版和LinuxPC版,Windows的具體產(chǎn)品類型包括Windows手機(jī)版和WindowsPC版。產(chǎn)品族和產(chǎn)品等級(jí)的關(guān)系:

從上圖可以看出,4個(gè)具體工廠,每個(gè)產(chǎn)品族有3個(gè)不同類型的產(chǎn)品,可以生產(chǎn)具體產(chǎn)品4*3=12中具體產(chǎn)品。而對于工廠方法模式,生產(chǎn)12中產(chǎn)品,需要有12個(gè)工廠。3.調(diào)用者(Client)只能看到抽象層次接口。要點(diǎn)

1.抽象工廠應(yīng)用場景:

一個(gè)系統(tǒng)要獨(dú)立于它的產(chǎn)品的創(chuàng)立、組合和表示時(shí)。一個(gè)系統(tǒng)要由多個(gè)產(chǎn)品系列中的一個(gè)來配置時(shí)。

當(dāng)你要強(qiáng)調(diào)一系列相關(guān)的產(chǎn)品對象的設(shè)計(jì)以便進(jìn)行聯(lián)合使用時(shí)。當(dāng)你提供一個(gè)產(chǎn)品類庫,而只想顯示它們的接口而不是實(shí)現(xiàn)時(shí)。

2.新增產(chǎn)品繁雜。抽象工廠增加產(chǎn)品組件時(shí),需要更改所有工廠的接口。如增加產(chǎn)品ProductC,則工廠基類和具體工廠需要增加接口CreateProductC。3.抽象工廠模式與工廠方法模式的區(qū)別。

a.重點(diǎn)不同。工廠方法模式強(qiáng)調(diào)的是不同的創(chuàng)立者根據(jù)自身需求去生產(chǎn)不同的具體產(chǎn)品,重點(diǎn)是生產(chǎn)具體產(chǎn)品;而抽象工廠模式則定位為“在不指定實(shí)體類別的前提下,提供了一個(gè)可以創(chuàng)立一系列相關(guān)或相互依靠之組件的接口〞,重點(diǎn)是創(chuàng)立相關(guān)組件。

b.抽象工廠提供了的“相關(guān)組件〞可以看成是具體的產(chǎn)品(如ProductA1),抽象工廠模式的“相關(guān)組件〞可由工廠模式實(shí)現(xiàn)。ConcreteFactory1.CreateProuductA()生產(chǎn)的具體產(chǎn)品,可以用工廠方法模式實(shí)現(xiàn),即每一個(gè)產(chǎn)品用一個(gè)工廠方法實(shí)現(xiàn)。

c.工廠方法模式只有一個(gè)抽象產(chǎn)品類,而抽象工廠模式有多個(gè)。工廠方法模式的具體工廠類只能創(chuàng)立一個(gè)具體產(chǎn)品類的實(shí)例,而抽象工廠模式可以創(chuàng)立多個(gè)。

d.抽象工廠不能直接創(chuàng)立產(chǎn)品,只能創(chuàng)立工廠,即抽象工廠創(chuàng)立的產(chǎn)品是工廠。雖然它也定義了創(chuàng)立產(chǎn)品的方法,但需要?jiǎng)?chuàng)立出來的具體的工廠實(shí)現(xiàn),即抽象工廠創(chuàng)立出的工廠創(chuàng)立產(chǎn)品。

e.工廠方法采用的是類繼承機(jī)制(生成一個(gè)子類,重寫該工廠方法,在該方法中生產(chǎn)一個(gè)對象);而抽象工廠采用的是對象組合機(jī)制,專門定義“工廠〞對象來負(fù)責(zé)對象的創(chuàng)立。對象組合的方式就是把“工廠〞對象作為參數(shù)傳遞。應(yīng)用

抽象工廠模式可應(yīng)用:支持多種數(shù)據(jù)庫的數(shù)據(jù)庫接口訪問層;界面設(shè)計(jì)各種風(fēng)格界面等。源碼中通過PC工廠和手機(jī)工廠和預(yù)裝的操作系統(tǒng)產(chǎn)品來舉例實(shí)現(xiàn)模式。

源碼

#include#includeusingnamespacestd;

/////////////產(chǎn)品classCLinux{public:

virtual~CLinux(){};//產(chǎn)品使用公共接口

virtualvoidStart()=0;};

classCLinuxMobile:publicCLinux{public:

CLinuxMobile(){

coutCreateLinux();pWindows=pFactory->CreateWindows();pLinux->Start();pWindows->Start();deletepWindows;deletepLinux;};

intmain(){

CFactory*pFactory=NULL;

//手機(jī)工廠。生產(chǎn)手機(jī)產(chǎn)品族,種類有Linux和WindowspFactory=newCMobileFactory;Test(pFactory);deletepFactory;cout

usingnamespacestd;

DELLDesktopProduct::DELLDesktopProduct(){

cout

usingnamespacestd;

IBMDesktopProduct::IBMDesktopProduct(){

cout

usingnamespacestd;

DELLNotebookProduct::DELLNotebookProduct(){

coutCreateDesktopProduct();fac->CreateNotebookProduct();deletefac;

fac=newIBMFactory();

fac->Creat

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論