簡單工廠模式,工廠方法模式和抽象工廠模式的異同_第1頁
簡單工廠模式,工廠方法模式和抽象工廠模式的異同_第2頁
簡單工廠模式,工廠方法模式和抽象工廠模式的異同_第3頁
簡單工廠模式,工廠方法模式和抽象工廠模式的異同_第4頁
全文預(yù)覽已結(jié)束

下載本文檔

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

文檔簡介

1、簡單工廠模式,工廠方法模式和抽象工廠模式的異同簡單工廠模式,工廠方法模式和抽象工廠模式都是屬于創(chuàng)建型設(shè)計模式,這三種創(chuàng)建型模 式都不需要知道具體類。我們掌握一種思想,就是在創(chuàng)建一個對象時,需要把容易發(fā)生變化的地 方給封裝起來,來控制變化(哪里變化,封裝哪里),以適應(yīng)客戶的變動,項(xiàng)目的擴(kuò)展。用這三 種設(shè)計模式都可以實(shí)現(xiàn),那究竟這三種設(shè)計模式有什么異同呢?下面根據(jù)這三者之間的特點(diǎn),優(yōu) 點(diǎn),缺點(diǎn),適用范圍進(jìn)行比較。特點(diǎn)簡單工廠模式:專門定義一個類來負(fù)責(zé)創(chuàng)建其他類的實(shí)例,被創(chuàng)建的實(shí)例通常都具有 共同的父類。它又稱為靜態(tài)工廠方法模式。它的實(shí)質(zhì)是由一個工廠 類根據(jù)傳入的參數(shù),動態(tài)決定應(yīng)該創(chuàng)建哪一個產(chǎn)品類(

2、這些產(chǎn)品類 繼承自一個父類或接口)的實(shí)例。簡單工廠模式的創(chuàng)建目標(biāo),所有 創(chuàng)建的對象都是充當(dāng)這個角色的某個具體類的實(shí)例。在這個模式中,工廠類是整個模式的關(guān)鍵所在。它包含必要的判斷邏輯,能夠根據(jù) 外界給定的信息,決定究竟應(yīng)該創(chuàng)建哪個具體類的對象。用戶在使 用時可以直接根據(jù)工廠類去創(chuàng)建所需的實(shí)例,而無需了解這些對象 是如何創(chuàng)建以及如何組織的。有利于整個軟件體系結(jié)構(gòu)的優(yōu)化。工廠方法模式:工廠方法是粒度很小的設(shè)計模式,因?yàn)槟J降谋憩F(xiàn)只是一個抽象的方法。提前定義用于創(chuàng)建對象的接口,讓子類決定實(shí)例化具體的某一個類,即 在工廠和產(chǎn)品中間增加接口,工廠不再負(fù)責(zé)產(chǎn)品的創(chuàng)建,由接口針對不 同條件返回具體的類實(shí)例,由

3、具體類實(shí)例去實(shí)現(xiàn)。工廠方法模式是簡單 工廠模式的衍生,解決了許多簡單工廠模式的問題。首先完全實(shí)現(xiàn)開 一閉原則,實(shí)現(xiàn)了可擴(kuò)展。其次實(shí)現(xiàn)更復(fù)雜的層次結(jié)構(gòu),可以應(yīng)用于 產(chǎn)品結(jié)果復(fù)雜的場合。工廠方法模式是對簡單工廠模式進(jìn)行了抽象。有 一個抽象的Factory類(可以是抽象類和接口),這個類將不在負(fù)責(zé)具 體的產(chǎn)品生產(chǎn),而是只制定一些規(guī)范,具體的生產(chǎn)工作由其子類去完成。 在這個模式中,工廠類和產(chǎn)品類往往可以依次對應(yīng)。即一個抽象工廠對 應(yīng)一個抽象產(chǎn)品,一個具體工廠對應(yīng)一個具體產(chǎn)品,這個具體的工廠就 負(fù)責(zé)生產(chǎn)對應(yīng)的產(chǎn)品。抽象工廠模式:抽象工廠模式是所有形態(tài)的工廠模式中最為抽象和最具一般性的一種形態(tài)。抽象工廠模

4、式是指當(dāng)有多個抽象角色時,使用的一種工廠 模式。抽象工廠模式可以向客戶端提供一個接口,使客戶端在不必指定產(chǎn)品的具體的情況下,創(chuàng)建多個產(chǎn)品族中的產(chǎn)品對象。它有多個抽象產(chǎn)品類,每個抽象產(chǎn)品類可以派生出多個具體產(chǎn)品類,一個抽象 工廠類,可以派生出多個具體工廠類,每個具體工廠類可以創(chuàng)建多個具 體產(chǎn)品類的實(shí)例。每一個模式都是針對一定問題的解決方案,工廠 方法模式針對的是一個產(chǎn)品等級結(jié)構(gòu);而抽象工廠模式針對的是多 個產(chǎn)品等級結(jié)果。優(yōu)點(diǎn)簡單工廠模式:工廠類含有必要的判斷邏輯,可以決定在什么時候創(chuàng)建哪一個產(chǎn)品類的實(shí) 例,客戶端可以免除直接創(chuàng)建產(chǎn)品對象的責(zé)任,而僅僅消費(fèi)產(chǎn)品。簡單 工廠模式通過這種做法實(shí)現(xiàn)了對責(zé)

5、任的分割。簡單工廠模式能夠根據(jù)外界 給定的信息,決定究竟應(yīng)該創(chuàng)建哪個具體類的對象。通過它,外界可以從 直接創(chuàng)建具體產(chǎn)品對象的尷尬局面中擺脫出來。外界與具體類隔離開來, 偶合性低。明確區(qū)分了各自的職責(zé)和權(quán)力,有利于整個軟件體系結(jié)構(gòu)的優(yōu) 化。工廠方法模式:工廠方法模式是為了克服簡單工廠模式的缺點(diǎn)(主要是為了滿足OCP)而 設(shè)計出來的。簡單工廠模式的工廠類隨著產(chǎn)品類的增加需要增加很多方法 (或代碼),而工廠方法模式每個具體工廠類只完成單一任務(wù),代碼簡潔。工廠方法模式完全滿足OCP,即它有非常良好的擴(kuò)展性。抽象工廠模式:抽象工廠模式主要在于應(yīng)對“新系列”的需求變化。分離了具體的類,抽 象工廠模式幫助你

6、控制一個應(yīng)用創(chuàng)建的對象的類,因?yàn)橐粋€工廠封裝創(chuàng)建 產(chǎn)品對象的責(zé)任和過程。它將客戶和類的實(shí)現(xiàn)分離,客戶通過他們的抽象 接口操縱實(shí)例,產(chǎn)品的類名也在具體工廠的實(shí)現(xiàn)中被分離,它們不出現(xiàn)在 客戶代碼中。它使得易于交換產(chǎn)品系列。一個具體工廠類在一個應(yīng)用中僅 出現(xiàn)一次一一即在它初始化的時候。這使得改變一個應(yīng)用的具體工廠變得 很容易。它只需改變具體的工廠即可使用不同的產(chǎn)品配置,這是因?yàn)橐粋€ 抽象工廠創(chuàng)建了一個完整的產(chǎn)品系列,所以整個產(chǎn)品系列會立刻改變。它 有利于產(chǎn)品的一致性。當(dāng)一個系列的產(chǎn)品對象被設(shè)計成一起工作時,一個 應(yīng)用一次只能使用同一個系列中的對象,這一點(diǎn)很重要,而抽象工廠很容 易實(shí)現(xiàn)這一點(diǎn)。抽象工廠

7、模式有助于這樣的團(tuán)隊(duì)的分工,降低了模塊間的 耦合性,提高了團(tuán)隊(duì)開發(fā)效率。缺點(diǎn)簡單工廠模式:當(dāng)產(chǎn)品有復(fù)雜的多層等級結(jié)構(gòu)時,工廠類只有自己,以不變應(yīng)萬變,就是 模式的缺點(diǎn)。因?yàn)楣S類集中了所有產(chǎn)品創(chuàng)建邏輯,一旦不能正常工作, 整個系統(tǒng)都要受到影響。系統(tǒng)擴(kuò)展困難,一旦添加新產(chǎn)品就不得不修改工 廠邏輯,有可能造成工廠邏輯過于復(fù)雜,違背了 開放-封閉原則(OCP). 另外,簡單工廠模式通常使用靜態(tài)工廠方法,這使得無法由子類繼承,造 成工廠角色無法形成基于繼承的等級結(jié)構(gòu)。工廠方法模式:不易于維護(hù),假如某個具體產(chǎn)品類需要進(jìn)行一定的修改,很可能需要修改 對應(yīng)的工廠類。當(dāng)同時需要修改多個產(chǎn)品類的時候,對工廠類的

8、修改會變 得相當(dāng)麻煩(對號入座已經(jīng)是個問題了)。抽象工廠模式:抽象工廠模式在于難于應(yīng)付“新對象”的需求變動。難以支持新種類的產(chǎn) 品。難以擴(kuò)展抽象工廠以生產(chǎn)新種類的產(chǎn)品。這是因?yàn)槌橄蠊S幾乎確定 了可以被創(chuàng)建的產(chǎn)品集合,支持新種類的產(chǎn)品就需要擴(kuò)展該工廠接口,這 將涉及抽象工廠類及其所有子類的改變。適用范圍簡單工廠模式:工廠類負(fù)責(zé)創(chuàng)建的對象比較少,客戶只知道傳入了工廠類的參數(shù),對于始何創(chuàng)建對象(邏輯)不關(guān)心。工廠方法模式:當(dāng)一個類不知道它所必須創(chuàng)建對象的類或一個類希望由子類來指定它所創(chuàng) 建的對象時,當(dāng)類將創(chuàng)建對象的職責(zé)委托給多個幫助子類中的某一個,并 且你希望將哪一個幫助子類是代理者這一信息局部化的時候,可以使用工 廠方法。抽象工廠模式:一個系統(tǒng)不應(yīng)當(dāng)依賴于產(chǎn)品類實(shí)例如何被創(chuàng)建、組合和表達(dá)的細(xì)節(jié), 這對于所有形態(tài)的工廠模式都是重要的。這個系統(tǒng)有多于一個的產(chǎn)品 族,而系統(tǒng)只消費(fèi)其中某一產(chǎn)品族。同屬于同一個產(chǎn)品族的產(chǎn)品是在 一起使用的,這一約束必須在系統(tǒng)的設(shè)計中體現(xiàn)出來。系統(tǒng)提供一

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論