版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
UNIT21設(shè)計模式導(dǎo)論主講人:譚成予副教授武漢大學(xué)計算機(jī)學(xué)院E-MAIL:nadinetan@163.com“NexttoMyLife,SoftwareIsMyPassion”——RobertC.Martin.
懂了設(shè)計模式,就懂了面向?qū)ο蠓治龊驮O(shè)計(OOA/D)的精要。反之好像也可能成立。道可道,非常道。道不遠(yuǎn)人,設(shè)計模式亦然如此。2模式與設(shè)計模式描述設(shè)計模式應(yīng)用設(shè)計模式解決設(shè)計問題選擇設(shè)計模式使用設(shè)計模式常用設(shè)計模式簡介本講的提綱31.1實(shí)例體會:簡單工廠模式下
的運(yùn)算器程序編寫程序?qū)崿F(xiàn)以下的功能:計算器控制臺程序,要求輸入兩個操作數(shù)和一個運(yùn)算符。
該程序采用簡單工廠模式處理!GetResult()OperationGetResult()OperationAddGetResult()OperationSubGetResult()OperationMulGetResult()OperationDivGetResult()OperationFactory41.2模式與設(shè)計模式ChristopherAlexander:每一個模式描述了一個在我們周圍不斷重復(fù)發(fā)生的問題,以及該問題的解決方案的核心。這樣,你就能一次又一次地使用該方案而不必重復(fù)勞動。(他說的是城市和建筑模式)模式的四個基本要素:模式名稱:唯一標(biāo)識模式,一個助記名。
問題:描述了應(yīng)該在何時使用模式,特定的設(shè)計問題。解決方案:描述了設(shè)計的組成成分,以及它們之間的相互關(guān)系、職責(zé)和協(xié)作方式。
效果:模式應(yīng)用的效果及使用模式應(yīng)權(quán)衡的問題。模式效果對系統(tǒng)的靈活性、擴(kuò)充性或可移植性的影響。51.3設(shè)計模式解析設(shè)計模式之于面向?qū)ο笙到y(tǒng)的設(shè)計和開發(fā)的作用就有如數(shù)據(jù)結(jié)構(gòu)之于面向過程開發(fā)的作用一般!面向?qū)ο笙到y(tǒng)的分析和設(shè)計實(shí)際上追求的就是兩點(diǎn),一是高內(nèi)聚(Cohesion),而是低耦合(Coupling)。面向?qū)ο蟮脑瓌t:封裝、繼承和多態(tài)、面向接口編程、優(yōu)先使用組合而不是繼承、將抽象和實(shí)現(xiàn)分離的思想。61.3設(shè)計模式解析設(shè)計模式體現(xiàn)的是一種思想,而思想則是指導(dǎo)行為的一切,理解和掌握了設(shè)計模式,并不是說記住了23種(或更多)設(shè)計場景和解決策略(實(shí)際上這也是很重要的一筆財富),實(shí)際接受的是一種思想的熏陶和洗禮,等這種思想融入到了你的思想中后,你就會不自覺地使用這種思想去進(jìn)行你的設(shè)計和開發(fā),這一切才是最重要的。72描述設(shè)計模式設(shè)計模式的目的:設(shè)計復(fù)用!
圖形符號:遠(yuǎn)遠(yuǎn)不夠,只是將設(shè)計過程的結(jié)果簡單記錄為類和對象之間的關(guān)系。用統(tǒng)一格式描述設(shè)計模式,每一個模式根據(jù)模板被封為若干部分。模板具有統(tǒng)一的信息描述結(jié)構(gòu):模式名和分類:簡潔地描述了模式的本質(zhì)意圖:回答問題“設(shè)計模式是做什么的?原理和意圖?”別名動機(jī):說明設(shè)計問題以及使用模式中的類、對象來解決該問題的特定場景。該場景將幫助你理解對模式的描述。適用性:什么情況下使用該設(shè)計模式?82描述設(shè)計模式用統(tǒng)一格式描述設(shè)計模式,每一個模式根據(jù)模板被封為若干部分。模板具有統(tǒng)一的信息描述結(jié)構(gòu):結(jié)構(gòu):采用基于對象建模技術(shù)的表示法對模式中的類進(jìn)行圖形描述。參與者:設(shè)計模式中的類和/或?qū)ο笠约八鼈兏髯缘穆氊?zé)。協(xié)作:模式的參與者怎樣協(xié)作以實(shí)現(xiàn)它們的職責(zé)。效果:模式怎樣支持它的目標(biāo)?使用模式的效果和所需做的權(quán)衡舍?。肯到y(tǒng)結(jié)構(gòu)的哪些方面可以獨(dú)立改變?實(shí)現(xiàn):實(shí)現(xiàn)模式時需要的提示、技術(shù)要點(diǎn)以及以避免的缺陷,以及實(shí)現(xiàn)語言存在的問題。92描述設(shè)計模式用統(tǒng)一格式描述設(shè)計模式,每一個模式根據(jù)模板被封為若干部分。模板具有統(tǒng)一的信息描述結(jié)構(gòu):代碼示例:實(shí)現(xiàn)該模式的代碼片段。已知應(yīng)用:實(shí)際系統(tǒng)中發(fā)現(xiàn)的模式的例子。相關(guān)模式:關(guān)系緊密的模式有哪些?不同之處在哪里?如何一起使用?103應(yīng)用設(shè)計模式解決設(shè)計問題尋找合適的對象:面向?qū)ο笤O(shè)計最困難的部分:將系統(tǒng)分解為對象集合,這個過程中需要考慮封裝、粒度、依賴關(guān)系、靈活性、性能、演化、復(fù)用等因素。雖然設(shè)計的許多對象來源與現(xiàn)實(shí)世界的分析模型,但設(shè)計結(jié)果中的類通常在現(xiàn)實(shí)世界中并不存在。設(shè)計模式幫你確定不明顯的抽象和描述這些抽象的對象。例如Strategy模式描述了怎樣實(shí)現(xiàn)空間互換的算法族。113應(yīng)用設(shè)計模式解決設(shè)計問題決定對象的粒度:Fa?ade模式描述了怎樣用對象表示完整的子系統(tǒng);Flyweight描述了如何支持大量的最小粒度的對象等。指定對象接口:操作的型構(gòu)(對象聲明的每一個操作的操作名、作為參數(shù)的對象和返回值)的集合就是對象的接口。描述對象的實(shí)現(xiàn):OMT表示法123應(yīng)用設(shè)計模式解決設(shè)計問題運(yùn)用復(fù)用機(jī)制:優(yōu)先使用對象組合,而不是類繼承:功能復(fù)用最常用的技術(shù)是類繼承(白箱復(fù)用,編譯時靜態(tài)定義)和對象組合(黑箱復(fù)用,運(yùn)行時刻動態(tài)定義)委托:接收請求的對象把操作委托給它的代理者,例如在類A中保存一個類B的實(shí)例,來代理類B的特定操作。對象組合的特例。參數(shù)化類型:非嚴(yán)格的面向?qū)ο蠊δ軓?fù)用技術(shù),即用類屬或模板。關(guān)聯(lián)運(yùn)行時刻和編譯時刻的結(jié)構(gòu):代碼結(jié)構(gòu)在編譯時刻就被確定下來,它由固定繼承關(guān)系的類組成。而運(yùn)行時刻結(jié)構(gòu)是由快速變化的通信對象網(wǎng)絡(luò)組成。二者是獨(dú)立的!133應(yīng)用設(shè)計模式解決設(shè)計問題設(shè)計應(yīng)支持變化
可能引發(fā)重新設(shè)計的一般原因:通過顯式地指定一個類來創(chuàng)建對象:AbstractFactory、FactoryMethod、Prototype對特殊操作的依賴:ChainofResposibility、Command對硬件和軟件平臺的依賴:
AbstractFactory、Bridge對對象表示或?qū)崿F(xiàn)的依賴:AbstractFactory、Bridge、Memento、Proxy算法依賴:Builder、Iterator、Strategy、TemplateMethod、Visitor143應(yīng)用設(shè)計模式解決設(shè)計問題設(shè)計應(yīng)支持變化
可能引發(fā)重新設(shè)計的一般原因:緊耦合:AbstractFactory、Command、Mediator、Observer、ChainofResponisibility通過生成子類來擴(kuò)充功能:Bridge、ChainofResposibility、Composite、Decorator、Observer、Strategy不能方便的對類修改:
Adaptor、Decorator、Visitor154選擇設(shè)計模式考慮設(shè)計模式是怎樣解決設(shè)計問題的瀏覽模式的意圖部分研究模式怎樣相互關(guān)聯(lián)研究目的相似的模式檢查重新設(shè)計的原因考慮你的設(shè)計中哪些是可變的165使用設(shè)計模式瀏覽一遍模式回頭研究結(jié)構(gòu)部分、參與者部分和協(xié)作部分看代碼示例部分,分析該模式代碼實(shí)例選擇模式參與者的名字,使得它們在上下文中有意義定義類定義模式中專用于應(yīng)用的操作名稱實(shí)現(xiàn)執(zhí)行模式中責(zé)任和協(xié)作的操作176常用設(shè)計模式簡介共23種模式,按照目的相似分為三類創(chuàng)建型設(shè)計模式:描述實(shí)例化對象的相關(guān)技術(shù),解決創(chuàng)建對象的有關(guān)問題結(jié)構(gòu)型設(shè)計模式:描述在軟件系統(tǒng)中組織類和對象的方法,避免在一個類被賦予過多職責(zé)而破壞類的封裝型和信息的隱藏,以及類之間功能重疊的問題行為設(shè)計模式:負(fù)責(zé)分配對象的職責(zé),為對象間協(xié)作建模提供有效的策略186常用設(shè)計模式簡介創(chuàng)建型設(shè)計模式AbstractFactory工廠模式
:為創(chuàng)建一系列相關(guān)的或者相互依賴的對象配置接口,而不必執(zhí)行它們具體的類。支持設(shè)計可變的部分:產(chǎn)品對象家族
客戶類和工廠類分開。消費(fèi)者任何時候需要某種產(chǎn)品,只需向工廠請求即可。消費(fèi)者無須修改就可以接納新產(chǎn)品。缺點(diǎn)是當(dāng)產(chǎn)品修改時,工廠類也要做相應(yīng)的修改。如:如何創(chuàng)建及如何向客戶端提供。196常用設(shè)計模式簡介創(chuàng)建型設(shè)計模式BuilderMethod建造模式
:將復(fù)雜的對象創(chuàng)建與它的表示分離,使用同樣的構(gòu)建過程可以創(chuàng)建不同的表示。支持設(shè)計可變的部分:如何創(chuàng)建一個組合對象
將產(chǎn)品的內(nèi)部表象和產(chǎn)品的生成過程分割開來,從而使一個建造過程生成具有不同的內(nèi)部表象的產(chǎn)品對象。建造模式使得產(chǎn)品內(nèi)部表象可以獨(dú)立的變化,客戶不必知道產(chǎn)品內(nèi)部組成的細(xì)節(jié)。建造模式可以強(qiáng)制實(shí)行一種分步驟進(jìn)行的建造過程。206常用設(shè)計模式簡介創(chuàng)建型設(shè)計模式FactoryMethod工廠方法模式:定義一個創(chuàng)建對象的接口,但卻讓一個子類來決定具體實(shí)例化哪一個類。支持設(shè)計可變的部分:被實(shí)例化的子類
核心工廠類不再負(fù)責(zé)所有產(chǎn)品的創(chuàng)建,而是將具體創(chuàng)建的工作交給子類去做,成為一個抽象工廠角色,僅負(fù)責(zé)給出具體工廠類必須實(shí)現(xiàn)的接口,而不接觸哪一個產(chǎn)品類應(yīng)當(dāng)被實(shí)例化這種細(xì)節(jié)。
216常用設(shè)計模式簡介創(chuàng)建型設(shè)計模式Prototype原始模型模式:使用原型實(shí)例指定創(chuàng)建對象的種類,而通過拷貝這個原型實(shí)例來創(chuàng)建新的實(shí)例。支持設(shè)計可變的部分:被實(shí)例化的類
原始模型模式允許動態(tài)的增加或減少產(chǎn)品類,產(chǎn)品類不需要非得有任何事先確定的等級結(jié)構(gòu),原始模型模式適用于任何的等級結(jié)構(gòu)。缺點(diǎn)是每一個類都必須配備一個克隆方法。
Singleton單例模式:保證在運(yùn)行的應(yīng)用程序中,一個類只實(shí)例化一次,并提供一個訪問它的全局訪問點(diǎn)。支持設(shè)計可變的部分:一個類的唯一實(shí)例
單例模式只應(yīng)在有真正的“單一實(shí)例”的需求時才可使用。226常用設(shè)計模式簡介結(jié)構(gòu)型設(shè)計模式Adapter適配器(變壓器)模式:把一個類的接口變換成客戶端所期望的另一種接口,從而使原本因接口不匹配而無法一起使用的兩個類那個一起使用。支持設(shè)計可變的部分:對象的接口
適配類可以根據(jù)參數(shù)返還一個合適的實(shí)例給客戶端。
Bridge橋梁模式:將一個復(fù)雜對象的構(gòu)建與它的表示分離,使得二者可以獨(dú)立變化。支持設(shè)計可變的部分:對象的實(shí)現(xiàn)
將抽象化與實(shí)現(xiàn)化脫耦,使得二者可以獨(dú)立的變化,也就是說將他們之間的強(qiáng)關(guān)聯(lián)變成弱關(guān)聯(lián),也就是指在一個軟件系統(tǒng)的抽象化和實(shí)現(xiàn)化之間使用組合/聚合關(guān)系而不是繼承關(guān)系,從而使兩者可以獨(dú)立的變化。
236常用設(shè)計模式簡介結(jié)構(gòu)型設(shè)計模式Composite合成模式:將對象組織到樹結(jié)構(gòu)中,可以用來描述整體和部分的關(guān)系。支持設(shè)計可變的部分:一個對象的結(jié)構(gòu)和組成
合成模式就是一個處理對象的樹結(jié)構(gòu)的模式。合成模式把部分與整體的關(guān)系用樹結(jié)構(gòu)表示出來。合成模式使得客戶端把一個個單獨(dú)的成分對象和由他們復(fù)合而成的合成對象同等看待。Decorator裝飾模式:動態(tài)給一個對象增加功能,這些功能可以在動態(tài)地撤銷。支持設(shè)計可變的部分:對象的職責(zé),不生成子類
裝飾模式以對客戶端透明的方式擴(kuò)展對象的功能,是繼承關(guān)系的一個替代方案,提供比繼承更多的靈活性。動態(tài)給一個對象增加功能,這些功能可以再動態(tài)的撤消。增加由一些基本功能的排列組合而產(chǎn)生的非常大量的功能。
246常用設(shè)計模式簡介結(jié)構(gòu)型設(shè)計模式Facade門面模式:為一個復(fù)雜系統(tǒng)提供了一個簡單的接口,即提供一個高層次的接口,使得系統(tǒng)更易于使用。每一個子系統(tǒng)只有一個門面類,而且此門面類只有一個實(shí)例,也就是說它是一個單例模式。但整個系統(tǒng)可以有多個門面類。支持設(shè)計可變的部分:一個子系統(tǒng)的接口Flyweight享元模式:創(chuàng)建共享對象的一個小型池,以共享方式高校的支持大量的細(xì)粒度對象。支持設(shè)計可變的部分:對象的存儲開銷
元模式大幅度的降低內(nèi)存中對象的數(shù)量
256常用設(shè)計模式簡介結(jié)構(gòu)型設(shè)計模式Proxy代理模式:給某一個對象提供一個代理對象,并由代理對象控制原來對象的引用。支持設(shè)計可變的部分:如何訪問一個對象;該對象的位置。ChainofResposibility責(zé)任鏈模式:將很多對象連接起來形成一條鏈。請求在這個鏈上傳遞,直到鏈上的某一個對象決定處理此請求為止。支持設(shè)計可變的部分:滿足一個請求的對象266常用設(shè)計模式簡介行為設(shè)計模式Command命令模式:把一個請求或者操作封裝到一個對象中,允許請求的一方和發(fā)送的一方獨(dú)立開來。支持設(shè)計可變的部分:何時、怎樣滿足一個請求
命令模式把發(fā)出命令的責(zé)任和執(zhí)行命令的責(zé)任分割開,委派給不同的對象。
Interpreter解釋器模式:給定一個語言后,該模式可以定義出其文法的一種表示,并同時提供一個解釋器。支持設(shè)計可變的部分:一個語言的文法及解釋
解釋器模式將描述怎樣在有了一個簡單的文法后,使用模式設(shè)計解釋這些語句。
276常用設(shè)計模式簡介行為設(shè)計模式Interator迭代子模式:分離一個集合對象的遍歷行為,抽象出一個迭代器類來負(fù)責(zé)。支持設(shè)計可變的部分:如何遍歷、訪問一個聚合的各元素Mediator調(diào)停者模式:用一個中介對象來封裝一系列的對象交互,使得這些對象不必相互明顯作用。支持設(shè)計可變的部分:對象間怎樣交互、和誰交互?
調(diào)停者模式將對象的行為和協(xié)作抽象化,把對象在小尺度的行為上與其他對象的相互作用分開處理。286常用設(shè)計模式簡介行為設(shè)計模式Memento備忘錄模式:在不破壞封裝的前提下,捕獲一個對象內(nèi)部狀態(tài)并外部化,存儲起來。支持設(shè)計可變的部分:一個對象中哪些私有信息存放在該對象之外,以及在什么時候進(jìn)行存儲。Obersver觀察者模式:定義了一種一對多的依賴關(guān)系,讓多個觀察者對象同時監(jiān)聽某一個主題對象。支持設(shè)計可變的部分:多個對象依賴于另外一個對象,而這些對象又如何保持一致296常用設(shè)計模式簡介行為設(shè)計模式State狀態(tài)模式:允許一個對象在其內(nèi)部狀態(tài)改變時,改變行為。支持設(shè)計
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 關(guān)于畢業(yè)學(xué)生實(shí)習(xí)報告四篇
- 經(jīng)股肱橈尺動脈介入治療對比-袁晉青
- 北京小學(xué)科學(xué)教師學(xué)年工作總結(jié)大全
- 兒童臨時監(jiān)護(hù)協(xié)議書(2篇)
- 辦公場地出租合同模板
- 深圳商鋪?zhàn)赓U合同書
- 贈送別克商務(wù)轎車協(xié)議書
- 廠房租賃協(xié)議合同書范本
- 揚(yáng)州地下停車位出租協(xié)議
- 八年級道德與法治下冊第二單元理解權(quán)利義務(wù)第四課公民義務(wù)第2框依法履行義務(wù)教案新人教版
- 《3-6歲兒童學(xué)習(xí)與發(fā)展指南》考試試題
- 核磁移機(jī)施工方案
- 伴瘤內(nèi)分泌綜合征
- 6SE70變頻器使用手冊
- 醫(yī)學(xué)課件第十六章 肝膽胰疾病-膽道疾病
- 春節(jié)工地停工復(fù)工計劃安排( 共10篇)
- 醫(yī)院春節(jié)期間值班制度
- 商業(yè)模式畫布模板-DOC格式
- 旭輝集團(tuán)目標(biāo)成本管理作業(yè)指引
- 國開電大2022年春季期末考試《物流管理定量分析方法》試題(試卷代號2320)
- 體外培育牛黃介紹呼吸科優(yōu)秀
評論
0/150
提交評論