




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
7.1設(shè)計(jì)模式概述重復(fù)遇到的典型問(wèn)題,描述這些共同問(wèn)題和解決這些問(wèn)題的方案就形成了所謂的模式。7.1.1設(shè)計(jì)模式的歷史模式分為幾個(gè)部分:特定的情景(Context),指模式在何種情況下發(fā)生作用;動(dòng)機(jī)(SystemofForce),指問(wèn)題或預(yù)期的目標(biāo);解決方案(Solution),平衡各動(dòng)機(jī)或新解決所闡述問(wèn)題的構(gòu)造或配置。每個(gè)模式描述了一個(gè)在某種特定情境下不斷重復(fù)發(fā)生的問(wèn)題,以及解決該問(wèn)題解決方案的核心所在。7.1.2為什么要使用設(shè)計(jì)模式面向?qū)ο笤O(shè)計(jì)時(shí)需要考慮封裝性、力度大小、依賴關(guān)系、靈活性、可重用性等。1、 簡(jiǎn)化并加快快設(shè)計(jì)無(wú)需從底層做起,重用成功的設(shè)計(jì),節(jié)約開(kāi)發(fā)時(shí)間,提高軟件質(zhì)量。2、 方便開(kāi)發(fā)人員之間的通信可以更準(zhǔn)確地描述問(wèn)題及問(wèn)題的解決方案,使解決方案具有一致性。3、 降低風(fēng)險(xiǎn)4、 有助于轉(zhuǎn)到面向?qū)ο蠹夹g(shù)開(kāi)發(fā)人員對(duì)新技術(shù)往往會(huì)有抵觸或排斥心理,對(duì)新技術(shù)可能帶來(lái)的效果持懷疑態(tài)度。成熟的設(shè)計(jì)模式具有以下特性:巧妙。通用,不依賴于系統(tǒng)、語(yǔ)言、領(lǐng)域。不僅僅停留在理論上。簡(jiǎn)單。可重用。面向?qū)ο蟆?.1.3設(shè)計(jì)模式的組成元素1、 模式名,簡(jiǎn)潔地描述了模式的本質(zhì),可以幫助我們思考。2、 問(wèn)題或意圖,解釋了設(shè)計(jì)問(wèn)題和問(wèn)題存在的前因后果,可能描述了特定的設(shè)計(jì)問(wèn)題。3、 情景,告訴我們?cè)撃J降倪m用性。4、 動(dòng)機(jī),描述相關(guān)的動(dòng)機(jī)和約束,通常需要對(duì)各期望的目標(biāo)進(jìn)行有限排序,動(dòng)機(jī)闡明了問(wèn)題的復(fù)雜性,定義了在相互沖突時(shí)所采取的各種權(quán)衡手段。5、 解決方案,因?yàn)槟J骄拖褚粋€(gè)模板,所以解決方案并不描述一個(gè)特定而具體的設(shè)計(jì)或?qū)崿F(xiàn),而是提供設(shè)計(jì)問(wèn)題的抽象描述和怎樣用一個(gè)具有一般意義的元素組合。6、 示例,幫助讀者理解模式的具體使用方法。7、 結(jié)果情景,闡述了模式后續(xù)狀態(tài)和副作用。8、 基本原理,解釋該模式如何、為何能解決當(dāng)前問(wèn)題。9、 相關(guān)模式,包括靜態(tài)的和動(dòng)態(tài)的,遷到模式、后續(xù)模式、替代模式。10、 已知應(yīng)用,通常好的模式前面都有一個(gè)摘要,提供簡(jiǎn)短的總結(jié)和概述,為模式描繪出一個(gè)清晰的圖畫(huà),提供有關(guān)該模式能夠解決問(wèn)題的快速信息。模式應(yīng)該說(shuō)明它的目標(biāo)讀者,以及對(duì)讀者有哪些知識(shí)要求。7.1.4設(shè)計(jì)模式的分類軟件模式主要可分為設(shè)計(jì)模式、分析模式、組織和過(guò)程模式等。設(shè)計(jì)模式主要用于得到簡(jiǎn)潔靈活的系統(tǒng)設(shè)計(jì)。按設(shè)計(jì)模式的目的劃分,創(chuàng)建型、結(jié)構(gòu)型、行為型;按設(shè)計(jì)模式范圍劃分,類設(shè)計(jì)模式、對(duì)象設(shè)計(jì)模式。1、創(chuàng)建型模式,對(duì)對(duì)象實(shí)例化過(guò)程的抽象,采用抽象類所定義的接口,封裝了對(duì)象如何創(chuàng)建、組合等信息。2、 結(jié)構(gòu)型模式,如何組合已有的類和對(duì)象以及獲得更大的結(jié)構(gòu)。3、 行為型模式,不僅描述對(duì)象或類的模式,還描述它們之間的通信模式,特別是描述一組對(duì)等的對(duì)象怎樣互相協(xié)作完成其中任一對(duì)象無(wú)法單獨(dú)完成的任務(wù)。7.2設(shè)計(jì)模式實(shí)例7.2.1創(chuàng)建性模式通過(guò)該了的子類來(lái)創(chuàng)建對(duì)象的。但是,這可能會(huì)限制在系統(tǒng)內(nèi)創(chuàng)建對(duì)象的類型或數(shù)目。1、 AbstractFactory模式在不指定具體類的情況下,為創(chuàng)建一些列相關(guān)或相互依賴的對(duì)象提供了接口。提供了一個(gè)可以確定合適的具體類的抽象類。優(yōu)點(diǎn):可以與具體類分開(kāi)。更容易在產(chǎn)品系列中轉(zhuǎn)換。提高了產(chǎn)品間的一致性。以下情況應(yīng)該使用AbstractFactory模式:系統(tǒng)獨(dú)立于產(chǎn)品的創(chuàng)建、組成、表示。系統(tǒng)配置成具有多個(gè)產(chǎn)品的系列。相關(guān)產(chǎn)品對(duì)象系列是共同使用的,而且必須確保這一點(diǎn)。你希望提供產(chǎn)品的類庫(kù),只開(kāi)放其接口。2、 Builder模式將復(fù)雜對(duì)象的構(gòu)件與表示相分離,相同的構(gòu)造過(guò)程可以創(chuàng)建不同的對(duì)象,通過(guò)只指定對(duì)象的類型和內(nèi)容。一次就可以創(chuàng)建所有的復(fù)雜對(duì)象,而其他模式一次就只能創(chuàng)建一個(gè)對(duì)象。優(yōu)點(diǎn):可以對(duì)產(chǎn)品內(nèi)部表示進(jìn)行改變。將構(gòu)造代碼與表示代碼相分離。以下情況應(yīng)該使用Builder模式:算法獨(dú)立于組成對(duì)象。構(gòu)造過(guò)程必須允許已構(gòu)件對(duì)象有不同表示。3、 FactoryMethod模式實(shí)例化工作交給其子類,可以在不修改代碼的情況下引入新類,因?yàn)樾骂愔粚?shí)現(xiàn)了接口。優(yōu)點(diǎn):代碼只處理接口,因此可以使用任何實(shí)現(xiàn)了接口的類。在類中創(chuàng)建對(duì)象比直接在客戶端創(chuàng)建要更加靈活。以下情況中,應(yīng)該使用FactoryMethod模式:類不能預(yù)料它必須創(chuàng)建的對(duì)象的類。類希望其子類指定要?jiǎng)?chuàng)建的對(duì)象。類將責(zé)任轉(zhuǎn)給某個(gè)幫助子類,而用戶希望定位那個(gè)被授權(quán)的幫助子類。4、 Prototype模式只要將對(duì)象類定義成能夠復(fù)制自身就可以實(shí)現(xiàn)。優(yōu)點(diǎn)如下:可以在運(yùn)行時(shí)添加或刪除產(chǎn)品。通過(guò)改變值指定新對(duì)象。通過(guò)改變結(jié)構(gòu)制定新對(duì)象。減少子類的生成和使用。可以用類動(dòng)態(tài)地配置應(yīng)用程序。以下情況中,應(yīng)該使用Prototype模式:運(yùn)行時(shí),指定需要實(shí)例化的類,例如動(dòng)態(tài)載入。避免構(gòu)建與產(chǎn)品的類層次結(jié)構(gòu)相似的工廠類層次結(jié)構(gòu)。5、 Singleton模式確保一個(gè)類只有一個(gè)實(shí)例,并且提供全局訪問(wèn)入口,確保使用這個(gè)實(shí)例所有的對(duì)象使用相同的實(shí)例。優(yōu)點(diǎn):對(duì)單個(gè)實(shí)例的受控訪問(wèn)。命名空間的減少。允許改進(jìn)操作和表示。允許改變數(shù)目的實(shí)例。比類操作更靈活。7.2.2結(jié)構(gòu)性模式機(jī)構(gòu)性模式控制較大部分之間的關(guān)系。它將以不同的方式影響應(yīng)用程序。允許在補(bǔ)充寫(xiě)代碼或自定義代碼的情況下創(chuàng)建系統(tǒng)。具有增強(qiáng)的重復(fù)使用性和應(yīng)用性能。1、 Adapter模式可以充當(dāng)兩個(gè)類之間的媒介,可以轉(zhuǎn)換一個(gè)類的接口,被另外一個(gè)類使用,使得具有不兼容接口的類能夠系統(tǒng)使用。優(yōu)點(diǎn):允許多個(gè)不兼容的對(duì)象進(jìn)行交互和通信。提高已有功能的重復(fù)使用性。以下情況,應(yīng)該使用Adapter模式:要使用已有類,而該類接口與所需的接口并不匹配。要?jiǎng)?chuàng)建可重用的類,該類可以與不相關(guān)或未知類進(jìn)行協(xié)作。要在一個(gè)不同于已知對(duì)象接口的接口環(huán)境中使用對(duì)象。必須要進(jìn)行多個(gè)源之間的接口轉(zhuǎn)換的時(shí)候。2、 Bridge模式將一個(gè)復(fù)雜的組件分成兩個(gè)獨(dú)立的但又相關(guān)的繼承層次結(jié)構(gòu):功能性抽象和內(nèi)部實(shí)現(xiàn)。優(yōu)點(diǎn):接口與實(shí)現(xiàn)相分離。提高了可擴(kuò)展性。對(duì)客戶端隱藏了實(shí)現(xiàn)的細(xì)節(jié)。以下情況中,應(yīng)該使用Bridge模式:避免在抽象及其實(shí)現(xiàn)之間存在永久的綁定。抽象及其實(shí)現(xiàn)可以使用子類進(jìn)行擴(kuò)展。抽象的實(shí)現(xiàn)被改動(dòng)不用重新編譯代碼。3、 Composite模式創(chuàng)建樹(shù)形層次結(jié)構(gòu)來(lái)改變復(fù)雜性。優(yōu)點(diǎn):定義了由主要對(duì)象和符合對(duì)象組成的類層次結(jié)構(gòu)。添加新的組件類型更加簡(jiǎn)單。結(jié)構(gòu)的靈活性和可管理性的接口。以下情況中,應(yīng)該使用Composite模式:想要表示對(duì)象的整個(gè)或者部分的層次結(jié)構(gòu)。想要客戶端能夠忽略符合對(duì)象和單個(gè)對(duì)象之間的差異。結(jié)構(gòu)可以具有任何級(jí)別的復(fù)雜性,而且是動(dòng)態(tài)的。4、 Decorator模式不修改對(duì)象外觀和功能的情況下添加或刪除對(duì)象功能。優(yōu)點(diǎn):比靜態(tài)繼承具有更大的靈活性。避免了特征裝載的類處于層次結(jié)構(gòu)的過(guò)高級(jí)別。簡(jiǎn)化了編碼。改進(jìn)了對(duì)象的擴(kuò)展性。在以下情況中,應(yīng)該使用Decorator模式:在單個(gè)對(duì)象中動(dòng)態(tài)并且透明地添加責(zé)任,不會(huì)影響其他對(duì)象。以后可能要修改的對(duì)象中添加責(zé)任。無(wú)法通過(guò)靜態(tài)子類化實(shí)現(xiàn)擴(kuò)展時(shí)。5、 Facade模式為子系統(tǒng)中的一組接口提供了一個(gè)統(tǒng)一的接口。更容易使用子系統(tǒng)的高級(jí)接口。優(yōu)點(diǎn):在不減少系統(tǒng)所提供的選項(xiàng)的情況下,為復(fù)雜系統(tǒng)提供了簡(jiǎn)單接口。屏蔽了子系統(tǒng)組件。提高若耦合度。將客戶端請(qǐng)求轉(zhuǎn)換后發(fā)送給能夠處理這些請(qǐng)求的子系統(tǒng)。以下情況中,應(yīng)使用Facade模式:為復(fù)雜的子系統(tǒng)提供簡(jiǎn)單的接口。客戶端和抽象的實(shí)現(xiàn)類中存在許多依賴關(guān)系。想要對(duì)子系統(tǒng)進(jìn)行分層。6、Flyweight模式通過(guò)共享對(duì)象減少對(duì)象數(shù)目。通過(guò)共享一個(gè)接口來(lái)避免使用多個(gè)具有相同信息的實(shí)例所帶來(lái)的開(kāi)銷(xiāo)。優(yōu)點(diǎn):減少了要處理的對(duì)象數(shù)目。如果對(duì)象能夠持續(xù),可以減少內(nèi)存和存儲(chǔ)設(shè)備。以下情況中,應(yīng)該使用Flyweight模式:應(yīng)用程序使用大量的對(duì)象。由于對(duì)象數(shù)目巨大,導(dǎo)致很高的存儲(chǔ)開(kāi)銷(xiāo)。不依賴于對(duì)象的身份。7.2.3行為性模式行為性模式影響系統(tǒng)的狀態(tài)、行為流。簡(jiǎn)化、優(yōu)化并且提高應(yīng)用程序的可維護(hù)性。1、ChainofResponsibility模式在系統(tǒng)中建立一個(gè)鏈,在首先接收到它的級(jí)別處被處理,或者定位到可以處理它的對(duì)象。優(yōu)點(diǎn):降低了耦合度。增加面向?qū)ο笾贫ㄘ?zé)任的靈活性。類的集合可以作為一個(gè)整體。以下情況中,應(yīng)該使用ChainofResponsibility模式:多個(gè)對(duì)象可以處理一個(gè)請(qǐng)求,而其處理器卻是未知的。在不指定確切的請(qǐng)求接受對(duì)象的情況下,向幾個(gè)對(duì)象中的一個(gè)發(fā)送請(qǐng)求。動(dòng)態(tài)地指定能夠處理請(qǐng)求的對(duì)象集。2、 Command模式在對(duì)象中封裝了請(qǐng)求。優(yōu)點(diǎn):將調(diào)用操作的對(duì)象與知道如何完成該操作的對(duì)象相分離。更容易添加新指令,因?yàn)椴挥眯薷囊延蓄悺R韵虑闆r中,應(yīng)該使用Command模式:要通過(guò)執(zhí)行的動(dòng)作來(lái)參數(shù)化對(duì)象。在不同的時(shí)間指定、排序、執(zhí)行請(qǐng)求。必須支持Undo、日志記錄或事務(wù)。3、 Interpreter模式解釋定義其語(yǔ)法表示的語(yǔ)言,提供了語(yǔ)句解釋器。優(yōu)點(diǎn):容易修改并擴(kuò)展語(yǔ)法。更容易實(shí)現(xiàn)語(yǔ)法。以下情況中,應(yīng)該使用Interpreter模式:語(yǔ)言的語(yǔ)法比較簡(jiǎn)單。效率并不是最主要的問(wèn)題。4、 Iterator模式為集合中的有序訪問(wèn)提供了一致的方法,而該集合是獨(dú)立于基礎(chǔ)集合。優(yōu)點(diǎn):支持集合的不同遍歷。簡(jiǎn)化了集合的接口。以下情況中,應(yīng)該使用Iterator模式:不開(kāi)放集合對(duì)象內(nèi)部表示的前提下,訪問(wèn)集合對(duì)象內(nèi)容。支持集合對(duì)象的多重遍歷。為遍歷集合中的不同結(jié)構(gòu)提供了統(tǒng)一的接口。5、 Mediator模式通過(guò)引入一個(gè)能夠管理對(duì)象間消息分布的對(duì)象,簡(jiǎn)化了系統(tǒng)中對(duì)象間的通信。提高了對(duì)象間的松耦合度,還可以獨(dú)立地改變其間的交互。優(yōu)點(diǎn):去除對(duì)象間的影響。簡(jiǎn)化了對(duì)象間協(xié)議。集中化了控制。由于不再需要直接互傳消息,單個(gè)組件變得更加簡(jiǎn)單,而且容易處理。由于不再需要包含邏輯來(lái)處理組件間的通信,組件變得更加通用。以下情況中,應(yīng)該使用Mediator模式:對(duì)象集合需要以一個(gè)定義規(guī)范但復(fù)雜的方式進(jìn)行通信。6、 Memento模式保持對(duì)象狀態(tài)的“快照”(snapshot),對(duì)象可以在不向外界公開(kāi)其內(nèi)容的情況下返回到它的最初狀態(tài)。優(yōu)點(diǎn):保持封裝的完整性。簡(jiǎn)化了返回到初始狀態(tài)所需的操作。以下情況中,應(yīng)該使用Memento模式:必須保存對(duì)象狀態(tài)的快照,恢復(fù)狀態(tài)。7、 Observer模式定義了對(duì)象間一到多的依賴關(guān)系,當(dāng)對(duì)象改變狀態(tài)時(shí),將自動(dòng)通知并更新它所有的依賴對(duì)象。優(yōu)點(diǎn):抽象了主題與Observer之間的耦合關(guān)系。支持廣播方式通信。以下情況中,應(yīng)該使用Observer模式:對(duì)一個(gè)對(duì)象的修改涉及對(duì)其他對(duì)象的修改,而且不知道有多少對(duì)象需要進(jìn)行相應(yīng)修改。對(duì)象應(yīng)該能夠在不同假設(shè)對(duì)象標(biāo)識(shí)的前提下通知其它對(duì)象。8、 State模式對(duì)象在內(nèi)部狀態(tài)變化時(shí),變更其行為,并且修改其類。優(yōu)點(diǎn):針對(duì)不同狀態(tài)來(lái)劃分行為,使?fàn)顟B(tài)轉(zhuǎn)換顯式進(jìn)行。9、 Strategy模式定義了一組能夠用來(lái)表示 bfb]可能行為集合的類。這些行為可以在應(yīng)用程序中使用,來(lái)修改應(yīng)用程序功能.。W'C°m優(yōu)點(diǎn):另一種子類化方法。在類自身中定義了每一個(gè)行為,減少了條件語(yǔ)句。更容易擴(kuò)展模型。以下情況中,應(yīng)該使用Strategy模式:許多相關(guān)類只是在行為方面有所區(qū)別。需要算法的不同變體。算法使用客戶端未知的數(shù)據(jù)。10、 TemplateMethod
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 疾病控制專業(yè)試題及答案
- 公關(guān)媒介面試題及答案
- 2025年網(wǎng)絡(luò)規(guī)劃設(shè)計(jì)師考試考點(diǎn)梳理試題及答案
- 加工坊員工管理制度
- 村級(jí)環(huán)境長(zhǎng)效管理制度
- 廠區(qū)控制網(wǎng)管理制度
- 贛南臍橙園管理制度
- 糕點(diǎn)店衛(wèi)生管理制度
- 氯化苯專業(yè)組織管理制度
- 個(gè)協(xié)財(cái)務(wù)管理制度
- GB/T 16474-2011變形鋁及鋁合金牌號(hào)表示方法
- 營(yíng)銷(xiāo)案場(chǎng)管家式服務(wù)方案
- “解決問(wèn)題的策略”小學(xué)數(shù)學(xué)教材解讀課件
- 企業(yè)戰(zhàn)略管理形考任務(wù)1
- 《國(guó)際貿(mào)易地理》課件
- 沖壓車(chē)間品質(zhì)提升改善方案
- 制動(dòng)器的英文版及翻譯
- 人教版七年級(jí)下冊(cè)數(shù)學(xué) 第五章達(dá)標(biāo)檢測(cè)卷
- JAVA外文文獻(xiàn)畢業(yè)設(shè)計(jì)
- 3510KV變電所設(shè)計(jì)湖南工程學(xué)院課設(shè)
- 電阻熔煉爐操作安全規(guī)程
評(píng)論
0/150
提交評(píng)論