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

下載本文檔

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

文檔簡介

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

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

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

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

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

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

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

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

溫馨提示

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

評論

0/150

提交評論