版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
基于設(shè)計(jì)模式的認(rèn)識(shí)與理解摘要:本文從設(shè)計(jì)模式的起源開(kāi)始介紹,通過(guò)對(duì)五種具體常用的設(shè)計(jì)模式的詳細(xì)介紹和分析來(lái)讓讀者更加具體形象的了解設(shè)計(jì)模式并學(xué)會(huì)在實(shí)際工作中應(yīng)用它們。關(guān)鍵字:設(shè)計(jì)模式通用結(jié)構(gòu)圖接口1引言設(shè)計(jì)模式源自建筑學(xué)和人類學(xué),設(shè)計(jì)模式是面向?qū)ο蠹夹g(shù)的最新進(jìn)展之一?,F(xiàn)在面向?qū)ο蠓治龉ぞ摺D書(shū)和培訓(xùn)都在加入設(shè)計(jì)模式的內(nèi)容,設(shè)計(jì)模式學(xué)習(xí)小組在各地的發(fā)展如火如荼。通常的建議,都是在掌握了基本面向?qū)ο蠹夹g(shù)之后,再學(xué)習(xí)設(shè)計(jì)模式。但在學(xué)習(xí)面向?qū)ο蠹夹g(shù)過(guò)程中較早地學(xué)習(xí)設(shè)計(jì)模式,對(duì)于加深面向?qū)ο蠓治雠c設(shè)計(jì)的理解大有裨益。2設(shè)計(jì)模式的類型設(shè)計(jì)模式總共可以分為三種類型:創(chuàng)建型模式、結(jié)構(gòu)型模式、行為型模式。2.1創(chuàng)建型設(shè)計(jì)模式創(chuàng)建型設(shè)計(jì)模式即以靈活的方式創(chuàng)建對(duì)象的集合,有助于我們?cè)O(shè)計(jì)包含對(duì)象集的應(yīng)用程序:允許我們從單一的代碼塊中創(chuàng)建幾個(gè)可能的集合,但是必須具備如下的屬性:(1)在運(yùn)行時(shí)可以創(chuàng)建集合的多個(gè)版本。(2)約束創(chuàng)建的對(duì)象:例如,確保類只有一個(gè)實(shí)例。創(chuàng)建型設(shè)計(jì)模式主要包括:Factory設(shè)計(jì)模式、AbstractFactory設(shè)計(jì)模式、Prototype(原型)設(shè)計(jì)模式、Singleton(單態(tài))模式。2.2結(jié)構(gòu)型設(shè)計(jì)模式結(jié)構(gòu)型設(shè)計(jì)模式即代表相關(guān)對(duì)象的集合,有助于我們以鏈表或樹(shù)的形式來(lái)安排對(duì)象集合。結(jié)構(gòu)型設(shè)計(jì)模式主要包括:Composite(復(fù)合)設(shè)計(jì)模式、Decorator(裝飾者)設(shè)計(jì)模式、Adapter(適配器)設(shè)計(jì)模式、Facade設(shè)計(jì)模式、Flyweight(享元)設(shè)計(jì)模式、Proxy(代理)設(shè)計(jì)模式。2.3行為型設(shè)計(jì)模式行為型設(shè)計(jì)模式即在對(duì)象中捕獲行為。行為型設(shè)計(jì)模式主要包括:ChainofResponsibility(職責(zé)鏈)設(shè)計(jì)模式、Command(指令)設(shè)計(jì)模式、Interpreter(解釋器)設(shè)計(jì)模式、Mediator(中介者)設(shè)計(jì)模式、Observer(觀察者)設(shè)計(jì)模式、State(狀態(tài))設(shè)計(jì)模式、Template(模板)設(shè)計(jì)模式。3設(shè)計(jì)模式的種類設(shè)計(jì)模式總共分為三大類:創(chuàng)建模型、結(jié)構(gòu)模型、行為模型。細(xì)分的話總共有23種設(shè)計(jì)模式。以下是對(duì)幾種模式的介紹。Facade模式Facade模式的意圖是為子系統(tǒng)中的一組接口提供一個(gè)統(tǒng)一接口。這個(gè)模式定義了一個(gè)更高層的接口,使子系統(tǒng)更加容易使用!Facade模式簡(jiǎn)化了對(duì)所需子系統(tǒng)的使用過(guò)程。但是,由于Facade并不完整,因此客戶可能無(wú)法使用某些功能。實(shí)現(xiàn)的步驟分兩步:第一步,定義一個(gè)(或多個(gè))具備所需接口的新類。第二步,讓新的類使用原有的系統(tǒng)。Facade
不需要使用一個(gè)復(fù)雜系統(tǒng)的所有功能,而且可以創(chuàng)建一個(gè)新的類,包含訪問(wèn)系統(tǒng)的所有規(guī)貝0。如果只需要使用系統(tǒng)的部分功能,那么你為新類所創(chuàng)建的API將比原系統(tǒng)的API簡(jiǎn)單的多。希望封裝或者隱藏原系統(tǒng)。希望使用原系統(tǒng)的功能,而且還希望增加一些新的功能。編寫新類的成本小于所有人學(xué)會(huì)使用或者未來(lái)維護(hù)原系統(tǒng)上所需的成本。Adapter模式Adapter模式的意圖是將一個(gè)類的借口轉(zhuǎn)換成客戶希望的另一個(gè)接口。這種模式使原本由于接口不兼容而不能一起工作的類可以一起工作。Facade模式與Adapter模式的比較:在兩個(gè)模式中,都存在既有的類。在Facade模式中,我無(wú)須按某個(gè)接口進(jìn)行設(shè)計(jì);而在Adapter模式中,則必須按某個(gè)接口進(jìn)行設(shè)計(jì)。(3)在Facade模式中不需要多態(tài)行為,而在Adapter模式中多態(tài)行為可能是需要的。在某些時(shí)候,如果只能按特定接口進(jìn)行設(shè)計(jì),那么就必須使用Adapter模式。(4)Fagade模式中的動(dòng)機(jī)是簡(jiǎn)化接口。而在Adapter模式中,盡管也是越簡(jiǎn)單越好,但是設(shè)計(jì)必須遵循一個(gè)已有的接口,不能簡(jiǎn)化任何東西,即使可能存在更簡(jiǎn)單的接口。(5)Facade模式與Adapter模式之間的另一個(gè)差異,就是Facade隱藏了多個(gè)類,而Adapter只隱藏了一個(gè)。將Facade置于一個(gè)非常復(fù)雜的對(duì)象之前,而用Adapter來(lái)包裝幾個(gè)共同實(shí)現(xiàn)所需功能的小對(duì)象,也是可能的。Adapter模式是一個(gè)很常用的模式,它將一個(gè)(或多個(gè))類的接口轉(zhuǎn)換成我們需要類所具備的另一個(gè)接口。它的實(shí)現(xiàn)方式是:創(chuàng)建一個(gè)具備所需接口的新類,然后包裝原有類的方法,這樣實(shí)際上就包含了被適配的對(duì)象。Bridge模式Bridge模式的意圖是將抽象與其實(shí)現(xiàn)解耦,使它們都可以獨(dú)立地變化。Bridge模式是最難理解的模式,部分原因是它的功能非常強(qiáng)大,適用于很多場(chǎng)合。而且,它還與常見(jiàn)的用繼承來(lái)處理特殊情況的方式背道而馳。但是,它卻是一個(gè)遵循設(shè)計(jì)模式社區(qū)兩大原則的極好例子:“找出變化并封裝之”和“優(yōu)先使用對(duì)象聚集,而不是類繼承”。圖3-3Bridge模式的一般結(jié)構(gòu)圖Bridge模式的實(shí)現(xiàn)過(guò)程分兩步。第一步,將實(shí)現(xiàn)封裝在一個(gè)抽象類中。第二步,在要實(shí)現(xiàn)的抽象的基類中包含一個(gè)實(shí)現(xiàn)的句柄。在Java中,可以在實(shí)現(xiàn)中使用借口來(lái)代替抽象類。Strategy模式Strategy模式的意圖是定義一系列的算法,把它們一個(gè)個(gè)封裝起來(lái),并且使它們可以相互替換。這個(gè)模式使算法可獨(dú)立于使用它的客戶而變化。對(duì)所需算法的選擇取決于發(fā)出請(qǐng)求的客戶或者要處理的數(shù)據(jù)。如果只有一些不會(huì)變化的算法,就不需要Strategy模式。
圖3-4Strategy模式的通用結(jié)構(gòu)圖Strategy模式是一種定義一系列算法的方法。概念上看,所有這些算法完成都是相同的工作,只是實(shí)現(xiàn)不同。Strategy模式的實(shí)現(xiàn)方式是讓使用算法的類包含一個(gè)抽象類,該抽象類有一個(gè)抽象方法指定如何調(diào)用算法。每個(gè)派生類按需要實(shí)現(xiàn)算法。FactoryMethod模式FactoryMethod模式是一個(gè)旨在幫助創(chuàng)建責(zé)任分配的模式。FactoryMethod模式的意圖是:定義一個(gè)用于創(chuàng)建對(duì)象的接口,讓子類決定實(shí)例化哪一個(gè)類。FactoryMethod使一個(gè)類的實(shí)例化延遲到其子類。FactoryMethod模式已經(jīng)在所有主要的面向?qū)ο笳Z(yǔ)言中實(shí)現(xiàn)了:(1)在Java中,集合的iterator方法是工廠方法。這一方法返回被請(qǐng)求集合的迭代器的正確類型。(2)在C#中,集合實(shí)現(xiàn)了Innumerable接口。這一接口定義了GetEnumerator方法,這是一個(gè)獲取集合迭代器的工廠方法。(3)在C++中,用到的工廠方法包括begin()和end()。所有這些情況下,用來(lái)獲取正確迭代器的方法都使用了FactoryMethod模式。ProductCreatorFactoryMethod()AnOperation()—InAnOperation(),Havethefollowing;.Product=FactoryMethod()LkConcreteProduct?ConcreteCreatorReturnnewConcreteProductFactoryMethod()圖3-5FactoryMethod模式的通用結(jié)構(gòu)圖FactoryMethod模式的實(shí)現(xiàn)方法是在抽象類中使用一個(gè)抽象方法(即C++的純虛函數(shù))。需要實(shí)例化一個(gè)被包含對(duì)象的時(shí)候抽象類的代碼將引用此方法,但是不知道需要的對(duì)象是哪一個(gè)。FactoryMethod模式是一個(gè)很簡(jiǎn)單的模式,在實(shí)際應(yīng)用中會(huì)不斷用到。它可以用于需要將對(duì)象實(shí)例化的規(guī)則推遲到某個(gè)派生類的情況。在這種情況下,將方法的實(shí)現(xiàn)放在負(fù)責(zé)該行為的對(duì)象中,最自然。4結(jié)語(yǔ)設(shè)計(jì)模式為我們的軟件開(kāi)發(fā)提供了非常有價(jià)值的經(jīng)驗(yàn)和方法。誦過(guò)在開(kāi)發(fā)團(tuán)隊(duì)中使用設(shè)計(jì)模式的經(jīng)驗(yàn)證明,設(shè)計(jì)模式既可以幫助開(kāi)發(fā)人員個(gè)人的學(xué)習(xí),也可以幫助團(tuán)隊(duì)的提高。這是因?yàn)椋?jīng)驗(yàn)較少的團(tuán)隊(duì)成員能夠親眼看到已經(jīng)掌握設(shè)計(jì)模式的資深開(kāi)發(fā)人員如何從中獲益,他們會(huì)更加自豪、主動(dòng)地學(xué)習(xí)這些強(qiáng)大的知識(shí)。大多數(shù)設(shè)計(jì)模式還能使軟件更容易修改和維護(hù)。其原因在于,它們都是久經(jīng)考驗(yàn)的解決方案。所以,它們的結(jié)構(gòu)都是經(jīng)過(guò)長(zhǎng)期發(fā)展形成的,比新構(gòu)思的解決方案更善于應(yīng)對(duì)變化。而且,這些模式所用代碼往往更易于理解,從而使代碼更易維護(hù)。設(shè)計(jì)模式還有一個(gè)好處是,你或者你的團(tuán)隊(duì)可以在不使用巨型繼承層次結(jié)構(gòu)的情況下,為復(fù)雜問(wèn)題創(chuàng)建出設(shè)計(jì)方案。同樣,即使
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度電視劇拍攝聘用一線影視演員合同
- 2025年度空調(diào)設(shè)備安裝與環(huán)保認(rèn)證服務(wù)合同
- 二零二五年度各類合同:教育培訓(xùn)機(jī)構(gòu)招生訂金協(xié)議
- 2025年度二零二五年度家族財(cái)富傳承父母贈(zèng)與子女房產(chǎn)合同
- 2025年度生態(tài)農(nóng)業(yè)貸款委托支付合同
- 二零二五年度裝修工程驗(yàn)收及驗(yàn)收責(zé)任合同
- 二零二五年度石場(chǎng)承包合同模板(含安全生產(chǎn)責(zé)任書(shū))
- 2025年度房屋租賃押金及定金合同模板
- 二零二五年度中式面館轉(zhuǎn)讓合同
- 2025年健身服務(wù)合同仲裁協(xié)議
- 2025江蘇太倉(cāng)水務(wù)集團(tuán)招聘18人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2024-2025學(xué)年人教新版高二(上)英語(yǔ)寒假作業(yè)(五)
- 江蘇省泰州市靖江市2024屆九年級(jí)下學(xué)期中考一模數(shù)學(xué)試卷(含答案)
- 沐足店長(zhǎng)合同范例
- 《旅游資料翻譯》課件
- 《鼻咽癌的診治》課件
- 2024年天津市中考英語(yǔ)試題卷(含答案)
- 有關(guān)信用證的案例分析
- 水中大腸桿菌的檢測(cè)實(shí)驗(yàn)報(bào)告
- 智慧體育場(chǎng)館建設(shè)方案
- 避暑旅游目的地評(píng)價(jià)指標(biāo)、閾值和評(píng)價(jià)等級(jí)表、人體舒適度、度假氣候指數(shù)和旅游氣候指數(shù)計(jì)算方法
評(píng)論
0/150
提交評(píng)論