常見的10種設(shè)計(jì)模式x_第1頁(yè)
常見的10種設(shè)計(jì)模式x_第2頁(yè)
常見的10種設(shè)計(jì)模式x_第3頁(yè)
常見的10種設(shè)計(jì)模式x_第4頁(yè)
常見的10種設(shè)計(jì)模式x_第5頁(yè)
已閱讀5頁(yè),還剩7頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、設(shè)計(jì)模式1 簡(jiǎn)單工廠模式簡(jiǎn)單工廠模式屬于類的創(chuàng)建型模式 ,又叫做靜態(tài)工廠方法模式。 通過專門定義 一個(gè)類來負(fù)責(zé)創(chuàng)建其他類的實(shí)例,被創(chuàng)建的實(shí)例通常都具有共同的父類。工廠( Creator )角色簡(jiǎn)單工廠模式的核心, 它負(fù)責(zé)實(shí)現(xiàn)創(chuàng)建所有實(shí)例的內(nèi)部邏輯。 工廠類可以被外界 直接調(diào)用,創(chuàng)建所需的產(chǎn)品對(duì)象。抽象( Product )角色簡(jiǎn)單工廠模式所創(chuàng)建的所有對(duì)象的父類, 它負(fù)責(zé)描述所有實(shí)例所共有的公共接口。具體產(chǎn)品( Concrete Product )角色 簡(jiǎn)單工廠模式所創(chuàng)建的具體實(shí)例對(duì)象優(yōu)缺點(diǎn)在這個(gè)模式中,工廠類是整個(gè)模式的關(guān)鍵所在。它包含必要的判斷邏輯,能 夠根據(jù)外界給定的信息, 決定究竟應(yīng)該創(chuàng)

2、建哪個(gè)具體類的對(duì)象。 用戶在使用時(shí)可 以直接根據(jù)工廠類去創(chuàng)建所需的實(shí)例, 而無(wú)需了解這些對(duì)象是如何創(chuàng)建以及如何 組織的。有利于整個(gè)軟件體系結(jié)構(gòu)的優(yōu)化。簡(jiǎn)單工廠模式的缺點(diǎn)也正體現(xiàn)在其工廠類上,由于工廠類集中了所有實(shí)例的 創(chuàng)建邏輯,所以“高內(nèi)聚”方面做的并不好。另外,當(dāng)系統(tǒng)中的具體產(chǎn)品類不斷 增多時(shí),可能會(huì)出現(xiàn)要求工廠類也要做相應(yīng)的修改,擴(kuò)展性并不很好。2 工廠方法模式工廠方法模式同樣屬于類的創(chuàng)建型模式又被稱為多態(tài)工廠模式 。工廠方法模 式的意義是定義一個(gè)創(chuàng)建產(chǎn)品對(duì)象的工廠接口, 將實(shí)際創(chuàng)建工作推遲到子類當(dāng)中。 核心工廠類不再負(fù)責(zé)產(chǎn)品的創(chuàng)建, 這樣核心類成為一個(gè)抽象工廠角色, 僅負(fù)責(zé)具 體工廠子類

3、必須實(shí)現(xiàn)的接口, 這樣進(jìn)一步抽象化的好處是使得工廠方法模式可以 使系統(tǒng)在不修改具體工廠角色的情況下引進(jìn)新的產(chǎn)品。抽象工廠(Creator )角色:工廠方法模式的核心,任何工廠類都必須實(shí)現(xiàn)這個(gè)接 口。具體工廠(Concrete Creator )角色:抽象工廠的一個(gè)實(shí)現(xiàn),負(fù)責(zé)實(shí)例化產(chǎn)品對(duì) 象。抽象(Product)角色:工廠方法模式所創(chuàng)建的所有對(duì)象的父類,它負(fù)責(zé)描述所有實(shí)例所共有的公共接口。具體產(chǎn)品( Concrete Product )角色 : 工廠方法模式所創(chuàng)建的具體實(shí)例對(duì)象 工廠方法模式與工廠模式的比較 : 工廠方法模式與簡(jiǎn)單工廠模式在結(jié)構(gòu)上的不同不是很明顯。 工廠方法類的核心 是一個(gè)抽象

4、工廠類,而簡(jiǎn)單工廠模式把核心放在一個(gè)具體類上。工廠方法模式之所以有一個(gè)別名叫多態(tài)性工廠模式是因?yàn)榫唧w工廠類都有 共同的接口,或者有共同的抽象父類。當(dāng)系統(tǒng)擴(kuò)展需要添加新的產(chǎn)品對(duì)象時(shí), 僅僅需要添加一個(gè)具體對(duì)象以及一個(gè) 具體工廠對(duì)象, 原有工廠對(duì)象不需要進(jìn)行任何修改, 也不需要修改客戶端, 很好 的符合了“開放封閉” 原則。而簡(jiǎn)單工廠模式在添加新產(chǎn)品對(duì)象后不得不修改 工廠方法,擴(kuò)展性不好。工廠方法模式退化后可以演變成簡(jiǎn)單工廠模式3抽象工廠模式抽象工廠模式是所有形態(tài)的工廠模式中最為抽象和最其一般性的。抽象工廠模式可以向客戶端提供一個(gè)接口,使得客戶端在不必指定產(chǎn)品的具體類型的情況 下,能夠創(chuàng)建多個(gè)產(chǎn)品

5、族的產(chǎn)品對(duì)象。抽象工廠(Creator )角色抽象工廠模式的核心,包含對(duì)多個(gè)產(chǎn)品結(jié)構(gòu)的聲明,任何工廠類都必須實(shí)現(xiàn)這個(gè) 接口。具體工廠(Concrete Creator )角色具體工廠類是抽象工廠的一個(gè)實(shí)現(xiàn),負(fù)責(zé)實(shí)例化某個(gè)產(chǎn)品族中的產(chǎn)品對(duì)象。抽象(Product )角色抽象模式所創(chuàng)建的所有對(duì)象的父類,它負(fù)責(zé)描述所有實(shí)例所共有的公共接口。具體產(chǎn)品(Concrete Product )角色抽象模式所創(chuàng)建的具體實(shí)例對(duì)象總結(jié):抽象工廠中方法對(duì)應(yīng)產(chǎn)品結(jié)構(gòu),具體工廠對(duì)應(yīng)產(chǎn)品族。4 單例模式單例模式是一種對(duì)象創(chuàng)建型模式,使用單例模式,可以保證為一個(gè)類只生成唯一的實(shí)例對(duì)象。也就是說,在整個(gè)程序空間中,該類只存在

6、一個(gè)實(shí)例對(duì)象。其實(shí),GoF對(duì)單例模式的定義是:保證一個(gè)類、只有一個(gè)實(shí)例存在,同時(shí)提 供能對(duì)該實(shí)例加以訪問的全局訪問方法。為什么要使用單例模式呢? 在應(yīng)用系統(tǒng)開發(fā)中,我們常常有以下需求:- 在多個(gè)線程之間,比如 servlet 環(huán)境,共享同一個(gè)資源或者操作同一個(gè)對(duì)象- 在整個(gè)程序空間使用全局變量,共享資源- 大規(guī)模系統(tǒng)中,為了性能的考慮,需要節(jié)省對(duì)象的創(chuàng)建時(shí)間等等。因?yàn)?Singleton 模式可以保證為一個(gè)類只生成唯一的實(shí)例對(duì)象,所以這些情況,Singleton 模式就派上用場(chǎng)了。單例模式實(shí)現(xiàn)1. 餓漢式。2. 懶漢式。3. 雙重檢查。5.代理模式Proxy 模式又叫做代理模式,是構(gòu)造型的設(shè)計(jì)

7、模式之一,它可以為其他對(duì)象 提供一種代理(Proxy)以控制對(duì)這個(gè)對(duì)象的訪問。所謂代理,是指具有與代理元(被代理的對(duì)象)具有相同的接口的類,客戶 端必須通過代理與被代理的目標(biāo)類交互, 而代理一般在交互的過程中 (交互前后), 進(jìn)行某些特別的處理。代理模式的結(jié)構(gòu)代理模式的角色和職責(zé)subject (抽象主題角色):真實(shí)主題與代理主題的共同接口。RealSubject (真實(shí)主題角色):定義了代理角色所代表的真實(shí)對(duì)象。Proxy (代理主題角色):含有對(duì)真實(shí)主題角色 的引用,代理角色通常在將客戶端調(diào)用傳遞給真是主題 對(duì)象之前或者之后執(zhí)行某些操作,而不是單純返回真實(shí)的對(duì)象。動(dòng)態(tài)代理1) Invoca

8、tionHandler 接口2) inv oke 方法3) Proxy. newProxyl nsta nce();6命令模式Comma nd莫式也叫命令模式,是行為設(shè)計(jì)模式的一種。Comman模式通過被 稱為Comman的類封裝了對(duì)目標(biāo)對(duì)象的調(diào)用行為以及調(diào)用參數(shù)。命令模式的應(yīng)用場(chǎng)景在面向?qū)ο蟮某绦蛟O(shè)計(jì)中,一個(gè)對(duì)象調(diào)用另一個(gè)對(duì)象,一般情況下的調(diào)用過 程是:創(chuàng)建目標(biāo)對(duì)象實(shí)例;設(shè)置調(diào)用參數(shù);調(diào)用目標(biāo)對(duì)象的方法。但在有些情 況下有必要使用一個(gè)專門的類對(duì)這種調(diào)用過程加以封裝,我們把這種專門的類 稱作comman(類。-整個(gè)調(diào)用過程比較繁雜,或者存在多處這種調(diào)用。這時(shí),使用Comman類對(duì)該調(diào)用加以封裝

9、,便于功能的再利用。-調(diào)用前后需要對(duì)調(diào)用參數(shù)進(jìn)行某些處理。-調(diào)用前后需要進(jìn)行某些額外處理,比如日志,緩存,記錄歷史操作等。命令模式的結(jié)構(gòu)invokerAl some limo esKs eKecute the commandCommand+ execute (j-ClientRpceiConere te co m ma rudLpjMA+ Aclicr()ai some time execulw cornmard命令模式的角色和職責(zé)Comma ndComman抽 象類。Con creteComma ndComma n的具體實(shí)現(xiàn)類Receiver需要被調(diào)用的目標(biāo)對(duì)象Invorker通過Invor

10、ker 執(zhí)行 Comman對(duì)象。7策略模式Strategy模式也叫策略模式是行為模式之一,它對(duì)一系列的算法加以封裝, 為所有算法定義一個(gè)抽象的算法接口,并通過繼承該抽象算法接口對(duì)所有的算法 加以封裝和實(shí)現(xiàn),具體的算法選擇交由客戶端決定(策略)。Strategy模式主要 用來平滑地處理算法的切換 。1)策略模式的結(jié)構(gòu)0 Strategy0 Contentc Mrs也勿,StratQgy9 ope ratio nO: voidG GoncreteStrategyA0 ConcneteStrategyBo algurithmintsrfaceO: voidj algorithrilnterfaceO

11、: void2)策略模式的角色和職責(zé)Strategy:策略(算法)抽象。Con creteStrategy各種策略(算法)的具體實(shí)現(xiàn)。Co ntext策略的外部封裝類,或者說策略的容器類。根據(jù)不同策略執(zhí)行不同的行 為。策略由外部環(huán)境決定。3)策略模式的優(yōu)點(diǎn):1. 策略模式提供了管理相關(guān)的算法族的辦法。策略類的等級(jí)結(jié)構(gòu)定義了一 個(gè)算法或行為族。恰當(dāng)使用繼承可以把公共的代碼移到父類里面,從而避免重復(fù) 的代碼。2. 策略模式提供了可以替換繼承關(guān)系的辦法。繼承可以處理多種算法或行 為。如果不是用策略模式,那么使用算法或行為的環(huán)境類就可能會(huì)有一些子類, 每一個(gè)子類提供一個(gè)不同的算法或行為。 但是,這樣一

12、來算法或行為的使用者就 和算法或行為本身混在一起。 決定使用哪一種算法或采取哪一種行為的邏輯就和 算法或行為的邏輯混合在一起, 從而不可能再獨(dú)立演化。 繼承使得動(dòng)態(tài)改變算法 或行為變得不可能。3. 使用策略模式可以避免使用多重條件轉(zhuǎn)移語(yǔ)句。 多重轉(zhuǎn)移語(yǔ)句不易維護(hù), 它把采取哪一種算法或采取哪一種行為的邏輯與算法或行為的邏輯混合在一起, 統(tǒng)統(tǒng)列在一個(gè)多重轉(zhuǎn)移語(yǔ)句里面,比使用繼承的辦法還要原始和落后。4) 策略模式的缺點(diǎn)有:1. 客戶端必須知道所有的策略類,并自行決定使用哪一個(gè)策略類。這就意 味著客戶端必須理解這些算法的區(qū)別, 以便適時(shí)選擇恰當(dāng)?shù)乃惴悺?換言之, 策 略模式只適用于客戶端知道所有

13、的算法或行為的情況。2. 策略模式造成很多的策略類。有時(shí)候可以通過把依賴于環(huán)境的狀態(tài)保存 到客戶端里面, 而將策略類設(shè)計(jì)成可共享的, 這樣策略類實(shí)例可以被不同客戶端 使用。換言之,可以使用享元模式來減少對(duì)象的數(shù)量。8.外觀模式Facade 模式也叫外觀模式,也稱門面模式,是由 GoF 提出的 23 種設(shè)計(jì)模式 中的一種。Facade模式為一組具有類似功能的類群,比如類庫(kù),子系統(tǒng)等等,提 供一個(gè)一致的簡(jiǎn)單的界面。這個(gè)一致的簡(jiǎn)單的界面被稱作 facade。外觀模式的結(jié)構(gòu)Packaigel-Cilasl. classdo S o meth i n gOPackageddoSomelhirigO6 一

14、、一doSomethingQ-j cPacke&3doSorriethingQCss 1 c1 = naw Classi Q;Classi c2 = new Class2Q;CI a s s3 c3 = new Class3Q: d doStuff(c2);c3 setXfc 1 getXQ); return c3 get/Q;外觀模式的角色和職責(zé)Facade為調(diào)用方定義簡(jiǎn)單的調(diào)用接口。Clie nts調(diào)用者。通過Facade接口調(diào)用提供某功能的內(nèi)部類群。Packages功能提供者。指提供功能的類群(模塊或子系統(tǒng))。9橋接模式Bridge模式又叫做橋接模式,是構(gòu)造型的設(shè)計(jì)模式之一。Bridge

15、模式基于類的最小設(shè)計(jì)原則,通過使用封裝,聚合以及繼承等行為來讓不同的類承擔(dān)不同 的責(zé)任。它的主要特點(diǎn)是把抽象(abstraction )與行為實(shí)現(xiàn)(implementation ) 分離開來,從而可以保持各部分的獨(dú)立性以及應(yīng)對(duì)它們的功能擴(kuò)展。橋接模式的結(jié)構(gòu)橋接模式的角色和職責(zé)Clie ntBridge模式的使用者Abstractio n抽象類接口(接口或抽象類);維護(hù)對(duì)行為實(shí)現(xiàn)(Implementor)的引用Refined Abstracti onAbstracti on子類Impleme ntor行為實(shí)現(xiàn)類接口 (Abstraction接口定義了基于Implementor接口的更高層次的操作)Con creteImpleme ntorImpleme ntor子類10.觀察者模式Observer模式是行為模式之一,它的作用是當(dāng)一個(gè)對(duì)象的狀態(tài)發(fā)生變化時(shí), 能夠自動(dòng)通知其他關(guān)聯(lián)對(duì)象,自動(dòng)刷新對(duì)象狀態(tài)。Observer模式提供給關(guān)聯(lián)對(duì)象一種同步通信的手段,使某個(gè)對(duì)象與依賴它的 其他對(duì)象之間保持狀態(tài)同步。觀察者模式的結(jié)構(gòu)觀察者模式的角色和職責(zé)Subject (被觀察者)被觀察的對(duì)象。當(dāng)需要被觀察的狀態(tài)發(fā)生變化時(shí),需要通知隊(duì)列中所有 觀察者對(duì)象。Subject需要維持(添加,刪除,通知)一個(gè)觀察者對(duì)象的隊(duì)列列 表。Con creteSubject被觀察者的

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論