設(shè)計模式總結(jié)-AbstractFactory模式_第1頁
設(shè)計模式總結(jié)-AbstractFactory模式_第2頁
設(shè)計模式總結(jié)-AbstractFactory模式_第3頁
設(shè)計模式總結(jié)-AbstractFactory模式_第4頁
免費預(yù)覽已結(jié)束,剩余1頁可下載查看

下載本文檔

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

文檔簡介

1、DOC可編輯修改 為你整理各種最新最全辦公范文 雙擊可以刪除設(shè)計模式總結(jié) -Abstract Factory 模式注:文檔內(nèi)容基本上來自于網(wǎng)上,并加上自己的理解而成。 有的覺得網(wǎng)友總結(jié)得非常好,就完全照搬下來,供學(xué)習(xí)之用然而,有的摘抄并沒有加上原鏈接和出處,請諒解。Abstract Factory模式強調(diào)的是系列產(chǎn)品的替換,或者 說系列產(chǎn)品的創(chuàng)建。抽像工廠和一般的工廠各有優(yōu)缺點:對于,普通工廠來說,我們是可以擴展產(chǎn)品的,但是對 于產(chǎn)生產(chǎn)品系列來說非常麻煩,會導(dǎo)致工廠泛濫。對對,抽像工廠來說,對于產(chǎn)生產(chǎn)品系統(tǒng)非常方便,但 對于產(chǎn)生產(chǎn)品品種來說,需要改動的地方比較多。Spring提供了一個簡單的解

2、決方案:BeanFactoryAbstract Factory 模式抽象工廠,是簡單工廠和工廠方法的升級版。相比這兩 個模式,抽象工廠有這更大的靈活性,同時也更加復(fù)雜一些。抽象工廠模式的實質(zhì)是“提供接口,創(chuàng)建一系列相關(guān)或 獨立的對象,而不指定這些對象的具體類?!?結(jié)構(gòu)理解1. AbstractFactory是抽象工廠類,聲明創(chuàng)建產(chǎn)品族的接口。具體工廠創(chuàng)建具體的產(chǎn)品族,可以創(chuàng)建出分屬于不 同產(chǎn)品等級的一個產(chǎn)品族中的所有對象。ConcreteFactoryl和ConcreteFactory2分別生產(chǎn)2個不同產(chǎn)品族。舉例:手機工廠生產(chǎn)的產(chǎn)品族中,產(chǎn)品有 Linux系統(tǒng)的 手機和 Windows系統(tǒng)的

3、手機。PC工廠生產(chǎn)的產(chǎn)品族中, 產(chǎn)品 有Linux系統(tǒng)的PC和Windows系統(tǒng)的PC (兩個產(chǎn)品族:手 機產(chǎn)品族和PC產(chǎn)品族)2. AbstractProductA 和 AbstractProductB 是產(chǎn)品基 類。它們的派生類是同產(chǎn)品等級結(jié)構(gòu)的具的體產(chǎn)品。舉例:Linux的具體產(chǎn)品類型包括 Linux手機版和Linux PC版,Windows的具體產(chǎn)品類型包括 Windows手機版和 Windows PC版。產(chǎn)品族和產(chǎn)品等級的關(guān)系:從上圖可以看出,4個具體工廠,每個產(chǎn)品族有3個不 同類型的產(chǎn)品,可以生產(chǎn)具體產(chǎn)品4*3=12中具體產(chǎn)品。而對于工廠方法模式,生產(chǎn)12中產(chǎn)品,需要有12個工廠。

4、3. 調(diào)用者只能看到抽象層次接口。要點1. 抽象工廠應(yīng)用場景:一個系統(tǒng)要獨立于它的產(chǎn)品的創(chuàng)建、組合和表示時。一個系統(tǒng)要多個產(chǎn)品系列中的一個來配置時。當(dāng)你要強調(diào)一系列相關(guān)的產(chǎn)品對象的設(shè)計以便進行聯(lián) 合使用時。當(dāng)你提供一個產(chǎn)品類庫,而只想顯示它們的接口而不是實現(xiàn)時。2. 新增產(chǎn)品復(fù)雜。抽象工廠增加產(chǎn)品組件時,需要更改所有工廠的接口。 如增加產(chǎn)品ProductC,則工廠基類和 具體工廠需要增加接口CreateProductC。3.抽象工廠模式與工廠方法模式的區(qū)別。a. 重點不同。工廠方法模式強調(diào)的是不同的創(chuàng)建者根 據(jù)自身需求去生產(chǎn)不同的具體產(chǎn)品,重點是生產(chǎn)具體產(chǎn)品; 而抽象工廠模式則定位為“在不指定

5、實體類別的前提下,提 供了一個可以創(chuàng)建一系列相關(guān)或互相依賴之組件的接口”, 重點是創(chuàng)建相關(guān)組件。b. 抽象工廠提供了的“相關(guān)組件”可以看成是具體的產(chǎn)品,抽象工廠模式的“相關(guān)組件”可工廠模式實現(xiàn)。生產(chǎn)的具體產(chǎn)品,可以用工廠方法模式實現(xiàn),即每一個產(chǎn)品用 一個工廠方法實現(xiàn)。c. 工廠方法模式只有一個抽象產(chǎn)品類,而抽象工廠模 式有多個。工廠方法模式的具體工廠類只能創(chuàng)建一個具體產(chǎn) 品類的實例,而抽象工廠模式可以創(chuàng)建多個。d. 抽象工廠不能直接創(chuàng)建產(chǎn)品,只能創(chuàng)建工廠,即抽 象工廠創(chuàng)建的產(chǎn)品是工廠。雖然它也定義了創(chuàng)建產(chǎn)品的方 法,但需要創(chuàng)建出來的具體的工廠實現(xiàn),即抽象工廠創(chuàng)建出 的工廠創(chuàng)建產(chǎn)品。e. 工廠方

6、法采用的是類繼承機制;而抽象工廠采用的是對象組合機制,專門定義“工廠”對象來負(fù)責(zé)對象的創(chuàng)建。 對象組合的方式就是把“工廠”對象作為參數(shù)傳遞。應(yīng)用抽象工廠模式可應(yīng)用:支持多種數(shù)據(jù)庫的數(shù)據(jù)庫接口訪 問層;界面設(shè)計各種風(fēng)格界面等。源碼中通過PC工廠和手機工廠和預(yù)裝的操作系統(tǒng)產(chǎn)品來舉例實現(xiàn)模式。源碼#include #include using namespace std;/產(chǎn)品 class CLinux public:virtualCLinux ;/產(chǎn)品使用公共接口virtual void Start = 0; ;class CLinuxMobile : public CLinux public:C

7、LinuxMobilecout CreateLinux ;pWindows =pFactory-CreateWindows ;pLinux-Start ;pWindows-Start ;delete pWindows;deletepLinux; ;int main CFactory* pFactory = NULL;/手機工廠。生產(chǎn)手機產(chǎn)品族,種類有Linux和Windows pFactory = new CMobileFactory;Test(pFactory);delete pFactory;coutusing namespace std;DELLDesktopProduct:DELLDesktopProduct coutusing namespace std;IBMDesktopProduct:IBMDesktopProduct coutusing namespace std;DELLNotebookProduct:DELLNotebookProduct coutCreateDesktopProduct;fac-CreateNotebookProduct ;delete fac;fac = new IBMFactory ;f

溫馨提示

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

最新文檔

評論

0/150

提交評論