




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、設(shè)計(jì)模式詳解一創(chuàng)建型模式1單件模式意圖保證一個類僅有一個實(shí)例,并提供一個訪問它的全局訪問點(diǎn)。適用性當(dāng)類只能有一個實(shí)例而且客戶可以從一個眾所周知的訪問點(diǎn)訪問它時。當(dāng)這個唯一實(shí)例應(yīng)該是通過子類化可擴(kuò)展的,并且客戶應(yīng)該無需更改代碼就能使用一個擴(kuò)展的實(shí)例時。2抽象工廠意圖提供一個創(chuàng)建一系列相關(guān)或相互依賴對象的接口,而無需指定它們具體的類。適用性一個系統(tǒng)要獨(dú)立于它的產(chǎn)品的創(chuàng)建、組合和表示時。一個系統(tǒng)要由多個產(chǎn)品系列中的一個來配置時。當(dāng)你要強(qiáng)調(diào)一系列相關(guān)的產(chǎn)品對象的設(shè)計(jì)以便進(jìn)行聯(lián)合使用時。當(dāng)你提供一個產(chǎn)品類庫,而只想顯示它們的接口而不是實(shí)現(xiàn)時。3建造者模式意圖將一個復(fù)雜對象的構(gòu)建與它的表示分離,使得同樣的
2、構(gòu)建過程可以創(chuàng)建不同的表示。適用性當(dāng)創(chuàng)建復(fù)雜對象的算法應(yīng)該獨(dú)立于該對象的組成部分以及它們的裝配方式時。當(dāng)構(gòu)造過程必須允許被構(gòu)造的對象有不同的表示時。4工廠方法模式意圖定義一個用于創(chuàng)建對象的接口,讓子類決定實(shí)例化哪一個類。FactoryMethod使一個類的實(shí)例化延遲到其子類。適用性當(dāng)一個類不知道它所必須創(chuàng)建的對象的類的時候。當(dāng)一個類希望由它的子類來指定它所創(chuàng)建的對象的時候。當(dāng)類將創(chuàng)建對象的職責(zé)委托給多個幫助子類中的某一個,并且你希望將哪一個幫助子類是代理者這一信息局部化的時候。5原型模式意圖用原型實(shí)例指定創(chuàng)建對象的種類,并且通過拷貝這些原型創(chuàng)建新的對象。適用性當(dāng)要實(shí)例化的類是在運(yùn)行時刻指定時,
3、例如,通過動態(tài)裝載;或者為了避免創(chuàng)建一個與產(chǎn)品類層次平行的工廠類層次時;或者當(dāng)一個類的實(shí)例只能有幾個不同狀態(tài)組合中的一種時。建立相應(yīng)數(shù)目的原型并克隆它們可能比每次用合適的狀態(tài)手工實(shí)例化該類更方便一些。二結(jié)構(gòu)型模式6適配器模式意圖將一個類的接口轉(zhuǎn)換成客戶希望的另外一個接口。Adapter模式使得原由于接口不兼容而不能一起工作的那些類可以一起工作。適用性你想使用一個已經(jīng)存在的類,而它的接口不符合你的需求。你想創(chuàng)建一個可以復(fù)用的類,該類可以與其他不相關(guān)的類或不可預(yù)見的類(即那些接口可能不一定兼容的類)協(xié)同工作。(僅適用于對象Adapter)你想使用一些已經(jīng)存在的子類,但是不可能對每一個都進(jìn)行子類化以
4、匹配它們的接口。對象適配器可以適配它的父類接口。7橋接模式意圖將抽象部分與它的實(shí)現(xiàn)部分分離,使它們都可以獨(dú)立地變化。適用性你不希望在抽象和它的實(shí)現(xiàn)部分之間有一個固定的綁定關(guān)系。例如這種情況可能是因?yàn)椋诔绦蜻\(yùn)行時刻實(shí)現(xiàn)部分應(yīng)可以被選擇或者切換。類的抽象以及它的實(shí)現(xiàn)都應(yīng)該可以通過生成子類的方法加以擴(kuò)充。這時Bridge模式使你可以對不同的抽象接口和實(shí)現(xiàn)部分進(jìn)行組合,并分別對它們進(jìn)行擴(kuò)充。對一個抽象的實(shí)現(xiàn)部分的修改應(yīng)對客戶不產(chǎn)生影響,即客戶的代碼不必重新譯。有許多類要生成。這樣一種類層次結(jié)構(gòu)說明你必須將一個對象分解成兩個部分。你想在多個對象間共享實(shí)現(xiàn)(可能使用引用計(jì)數(shù)),但同時要求客戶并不知道這一
5、點(diǎn)。8組合模式意圖將對象組合成樹形結(jié)構(gòu)以表示“部分-整體”的層次結(jié)構(gòu)。Composite使得用戶對單個對象和組合對象的使用具有一致性。適用性你想表示對象的部分-整體層次結(jié)構(gòu)。你希望用戶忽略組合對象與單個對象的不同,用戶將統(tǒng)一地使用組合結(jié)構(gòu)中的所有對象。9裝飾模式意圖動態(tài)地給一個對象添加一些額外的職責(zé)。就增加功能來說,Decorator模式相比生成子類更為靈活。適用性在不影響其他對象的情況下,以動態(tài)、透明的方式給單個對象添加職責(zé)。處理那些可以撤消的職責(zé)。當(dāng)不能采用生成子類的方法進(jìn)行擴(kuò)充時。一種情況是,可能有大量獨(dú)立的擴(kuò)展,為支持每一種組合將產(chǎn)生大量的子類,使得子類數(shù)目呈爆炸性增長。另一種情況可能
6、是因?yàn)轭惗x被隱藏,或類定義不能用于生成子類。10外觀模式意圖為子系統(tǒng)中的一組接口提供一個一致的界面,F(xiàn)acade模式定義了一個高層接口,這個接口使得這一子系統(tǒng)更加容易使用。適用性當(dāng)你要為一個復(fù)雜子系統(tǒng)提供一個簡單接口時。子系統(tǒng)往往因?yàn)椴粩嘌莼兊迷絹碓綇?fù)雜。大多數(shù)模式使用時都會產(chǎn)生更多更小的類。這使得子系統(tǒng)更具可重用性,也更容易對子系統(tǒng)進(jìn)行定制,但這也給那些不需要定制子系統(tǒng)的用戶帶來一些使用上的困難。Facade可以提供一個簡單的缺省視圖,這一視圖對大多數(shù)用戶來說已經(jīng)足夠,而那些需要更多的可定制性的用戶可以越過Facade層。客戶程序與抽象類的實(shí)現(xiàn)部分之間存在著很大的依賴性。引入Facad
7、e將這個子系統(tǒng)與客戶以及其他的子系統(tǒng)分離,可以提高子系統(tǒng)的獨(dú)立性和可移植性。當(dāng)你需要構(gòu)建一個層次結(jié)構(gòu)的子系統(tǒng)時,使用Facade模式定義子系統(tǒng)中每層的入口點(diǎn)。如果子系統(tǒng)之間是相互依賴的,你可以讓它們僅通過Facade進(jìn)行通訊,從而簡化了它們之間的依賴關(guān)系。11享元模式意圖運(yùn)用共享技術(shù)有效地支持大量細(xì)粒度的對象。適用性一個應(yīng)用程序使用了大量的對象。完全由于使用大量的對象,造成很大的存儲開銷。對象的大多數(shù)狀態(tài)都可變?yōu)橥獠繝顟B(tài)。如果刪除對象的外部狀態(tài),那么可以用相對較少的共享對象取代很多組對象。應(yīng)用程序不依賴于對象標(biāo)識。由于Flyweight對象可以被共享,對于概念上明顯有別的對象,標(biāo)識測試將返回真
8、值。12代理模式意圖:為其他對象提供一種代理以控制對這個對象的訪問。適用性在需要用比較通用和復(fù)雜的對象指針代替簡單的指針的時候,使用Proxy模式。下面是一些可以使用Proxy模式常見情況:1)遠(yuǎn)程代理(RemoteProxy)為一個對象在不同的地址空間提供局部代表。NEXTSTEPAdd94使用NXProxy類實(shí)現(xiàn)了這一目的。CoplienCop92稱這種代理為“大使”(Ambassador)。2)虛代理(VirtualProxy)根據(jù)需要創(chuàng)建開銷很大的對象。在動機(jī)一節(jié)描述的ImageProxy就是這樣一種代理的例子。3)保護(hù)代理(ProtectionProxy)控制對原始對象的訪問。保護(hù)代
9、理用于對象應(yīng)該有不同的訪問權(quán)限的時候。例如,在Choices操作系統(tǒng)CIRM93中KemelProxies為操作系統(tǒng)對象提供了訪問保護(hù)。4)智能指引(SmartReference)取代了簡單的指針,它在訪問對象時執(zhí)行一些附加操作。它的典型用途包括: 對指向?qū)嶋H對象的引用計(jì)數(shù),這樣當(dāng)該對象沒有引用時,可以自動釋放它(也稱為SmartPointersEde92。 當(dāng)?shù)谝淮我靡粋€持久對象時,將它裝入內(nèi)存。在訪問一個實(shí)際對象前,檢查是否已經(jīng)鎖定了它,以確保其他對象不能改變它。三行為型模式13職責(zé)鏈模式意圖使多個對象都有機(jī)會處理請求,從而避免請求的發(fā)送者和接收者
10、之間的耦合關(guān)系。將這些對象連成一條鏈,并沿著這條鏈傳遞該請求,直到有一個對象處理它為止。適用性有多個的對象可以處理一個請求,哪個對象處理該請求運(yùn)行時刻自動確定。你想在不明確指定接收者的情況下,向多個對象中的一個提交一個請求??商幚硪粋€請求的對象集合應(yīng)被動態(tài)指定。14命令模式意圖將一個請求封裝為一個對象,從而使你可用不同的請求對客戶進(jìn)行參數(shù)化;對請求排隊(duì)或記錄請求日志,以及支持可撤消的操作。適用性使用命令模式作為"CallBack"在面向?qū)ο笙到y(tǒng)中的替代。"CallBack"講的便是先將一個函數(shù)登記上,然后在以后調(diào)用此函數(shù)。需要在不同的時間指定請求、將請求
11、排隊(duì)。一個命令對象和原先的請求發(fā)出者可以有不同的生命期。換言之,原先的請求發(fā)出者可能已經(jīng)不在了,而命令對象身仍然是活動的。這時命令的接收者可以是在地,也可以在網(wǎng)絡(luò)的另外一個地址。命令對象可以在串形化之后傳送到另外一臺機(jī)器上去。系統(tǒng)需要支持命令的撤消(undo)。命令對象可以把狀態(tài)存儲起來,等到客戶端需要撤銷命令所產(chǎn)生的效果時,可以調(diào)用undo()方法,把命令所產(chǎn)生的效果撤銷掉。命令對象還可以提供redo()方法,以供客戶端在需要時,再重新實(shí)施命令效果。如果一個系統(tǒng)要將系統(tǒng)中所有的數(shù)據(jù)更新到日志里,以便在系統(tǒng)崩潰時,可以根據(jù)日志里讀回所有的數(shù)據(jù)更新命令,重新調(diào)用Execute()方法一條一條執(zhí)行
12、這些命令,從而恢復(fù)系統(tǒng)在崩潰前所做的數(shù)據(jù)更新。一個系統(tǒng)需要支持交易(Transaction)。一個交易結(jié)構(gòu)封裝了一組數(shù)據(jù)更新命令。使用命令模式來實(shí)現(xiàn)交易結(jié)構(gòu)可以使系統(tǒng)增加新的交易類型。15解釋器模式意圖給定一個語言,定義它的文法的一種表示,并定義一個解釋器,這個解釋器使用該表示來解釋語言中的句子。適用性當(dāng)有一個語言需要解釋執(zhí)行,并且你可將該語言中的句子表示為一個抽象語法樹時,可使用解釋器模式。而當(dāng)存在以下情況時該模式效果最好:該文法簡單對于復(fù)雜的文法,文法的類層次變得龐大而無法管理。此時語法分析程序生成器這樣的工具是更好的選擇。它們無需構(gòu)建抽象語法樹即可解釋表達(dá)式,這樣可以節(jié)省空間而且還可能節(jié)省時間。效率不是一個關(guān)鍵問題最高效的解釋器通常不是通過直接解釋語法分析樹實(shí)現(xiàn)的,而是首先將它們轉(zhuǎn)換成另一種形式。例如,正則表達(dá)式通常被轉(zhuǎn)換成狀態(tài)機(jī)。但即使在這種情況下,轉(zhuǎn)換器仍可用解釋器模式實(shí)現(xiàn),該模式仍是有用的。16迭代器模式意圖提供一種方法順序訪問一個聚合對象中各個元素,而又不需暴露該對象的內(nèi)部表示。適用性訪問一個聚合對象的內(nèi)容而無需暴露它的內(nèi)部表示。支持對聚合對象的多種遍歷。為遍歷不同的聚合
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 人力資源咨詢顧問合同書
- 產(chǎn)品售后服務(wù)情況說明表
- 制造業(yè)企業(yè)知識產(chǎn)權(quán)保護(hù)策略研究
- 光纜遷移施工方案范本
- 橡膠跑道施工方案
- 涼山道路施工方案
- TCSMT YB011-2024 天然氣發(fā)熱量測量裝置測試技術(shù)規(guī)范
- 建筑工程人工費(fèi)承包合同-@-1
- 物業(yè)地面處理方案
- 透水砼路面施工方案
- 精細(xì)化工工藝學(xué)-第1章緒論講解課件
- 仰拱棧橋計(jì)算
- 中醫(yī)婦科 月經(jīng)過多課件
- 2022年江西制造職業(yè)技術(shù)學(xué)院單招語文試題及答案解析
- 穆斯林太巴熱咳慶念詞文
- 商標(biāo)一級授權(quán)書模板
- 軟硬結(jié)合板的設(shè)計(jì)制作與品質(zhì)要求課件
- 民營醫(yī)院組織架構(gòu)圖示
- 慢性心功能不全護(hù)理查房
- 初中 初二 物理 凸透鏡成像規(guī)律實(shí)驗(yàn)(習(xí)題課) 教學(xué)設(shè)計(jì)
- 消防維保方案 (詳細(xì)完整版)
評論
0/150
提交評論