




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、電子科技大學電子科技大學 計算機學院計算機學院. .軟件學院軟件學院1TP-52nChristopher Alexander教授的教授的“三步曲三步曲”q研究模式的理論研究模式的理論建筑的永恒之道建筑的永恒之道q第一個完整的模式語言第一個完整的模式語言建筑模式語言建筑模式語言q理性地用模式來指導建筑過程理性地用模式來指導建筑過程俄勒岡實俄勒岡實驗驗2TP-52簡單地說,模式是一個出現(xiàn)在世界上的實物,簡單地說,模式是一個出現(xiàn)在世界上的實物,同時也是一條規(guī)則,告訴你應該如何創(chuàng)建一個同時也是一條規(guī)則,告訴你應該如何創(chuàng)建一個實物、應該在何時創(chuàng)建。它既是過程,也是實實物、應該在何時創(chuàng)建。它既是過程,也是
2、實物;既是對當前實物的描述,也是對創(chuàng)建實物物;既是對當前實物的描述,也是對創(chuàng)建實物的過程的描述。的過程的描述。C.AlexanderC.Alexander,建筑的永恒之道建筑的永恒之道3TP-52n建筑設計師建筑設計師Christopher Alexander:n“每一個模式描述了一個在我們周圍不每一個模式描述了一個在我們周圍不斷重復發(fā)生的問題,以及該問題的解決斷重復發(fā)生的問題,以及該問題的解決方案的核心。這樣,你就能一次又一次方案的核心。這樣,你就能一次又一次地使用該方案而不必做重復勞動。地使用該方案而不必做重復勞動?!?TP-52n人們在自己的環(huán)境中不斷發(fā)現(xiàn)問題和找尋問題人們在自己的環(huán)境中
3、不斷發(fā)現(xiàn)問題和找尋問題的解決方案的時候,發(fā)現(xiàn)有一些問題及其解決的解決方案的時候,發(fā)現(xiàn)有一些問題及其解決方案不斷變換面孔重復出現(xiàn),在這些不同的面方案不斷變換面孔重復出現(xiàn),在這些不同的面孔后面是共同的本質(zhì);這就是模式??缀竺媸枪餐谋举|(zhì);這就是模式。 n模式是一種問題的解決思路,它為經(jīng)常出現(xiàn)的模式是一種問題的解決思路,它為經(jīng)常出現(xiàn)的問題提供了通用可靠的解決方案,適用于多種問題提供了通用可靠的解決方案,適用于多種領域環(huán)境。領域環(huán)境。n模式同時也是一種表達式框架。模式同時也是一種表達式框架。5TP-52n模式所描述的問題及問題的答案都應當是具有模式所描述的問題及問題的答案都應當是具有代表性的問題和問題
4、的答案代表性的問題和問題的答案n代表性代表性以不同的形式重復出現(xiàn),允許使用以不同的形式重復出現(xiàn),允許使用者舉一反三,將它應用到不同的環(huán)境中去。者舉一反三,將它應用到不同的環(huán)境中去。n為了與其他人交流,通常還要求給這個問題和為了與其他人交流,通常還要求給這個問題和問題的答案一個名字問題的答案一個名字6TP-52n1987年年Ward Cunningham和和Kent Beck使用使用Alexander的理論發(fā)展出一個有五個模式的語言來指導的理論發(fā)展出一個有五個模式的語言來指導Smalltalk開發(fā)開發(fā)nJim Coplien搜集搜集C+語言的成例語言的成例(idioms),成例是,成例是模式的一
5、種模式的一種n從從1990到到1992年,年,GOF的成員開始他們搜集模式的成員開始他們搜集模式的工作的工作n1993年年8月,月,Kent Beck和和Grady Booch主持了第主持了第一次關于模式的會議一次關于模式的會議n模式化方法研究的開創(chuàng)性著作模式化方法研究的開創(chuàng)性著作Design Patterns7TP-528TP-52n重用重用(reuse):是目標是目標q兩種重要的重用手段兩種重要的重用手段nInheritance & compositionn接口與實現(xiàn)分離接口與實現(xiàn)分離q接口保持不變,分離帶來靈活性接口保持不變,分離帶來靈活性q多態(tài)性多態(tài)性(polymorphism)nDe
6、coupleq降低復雜性降低復雜性9TP-52n 模式名稱(模式名稱(pattern name) 一個助記名,它用一個助記名,它用一兩個詞來描述模式的問題、解決方案和效果。一兩個詞來描述模式的問題、解決方案和效果。n問題問題(problem) 描述了應該在何時使用模式。描述了應該在何時使用模式。它解釋了設計問題和問題存在的前因后果。它解釋了設計問題和問題存在的前因后果。n解決方案解決方案(solution) 描述了設計的組成成分,描述了設計的組成成分,它們之間的相互關系及各自的職責和協(xié)作方式。它們之間的相互關系及各自的職責和協(xié)作方式。n效果效果(consequences) 軟件效果大多關注對時
7、間軟件效果大多關注對時間和空間的衡量,它們也表述了語言和實現(xiàn)問題和空間的衡量,它們也表述了語言和實現(xiàn)問題10TP-52n針對問題域不同:設計模式針對面向?qū)ο蟮膯栣槍栴}域不同:設計模式針對面向?qū)ο蟮膯栴}域;框架針對特定業(yè)務的問題域;題域;框架針對特定業(yè)務的問題域; n設計模式比框架更為抽象:設計模式在碰到具設計模式比框架更為抽象:設計模式在碰到具體問題后,才能產(chǎn)生代碼;框架已經(jīng)可以用代體問題后,才能產(chǎn)生代碼;框架已經(jīng)可以用代碼表示。碼表示。 n設計模式是比框架更小的體系結構元素:設計模式是比框架更小的體系結構元素: 框框架中可以包括多個設計模式。架中可以包括多個設計模式。 11TP-52n盡力
8、用一種標準的方式描述設計經(jīng)驗盡力用一種標準的方式描述設計經(jīng)驗n為設計者提供一種通用的語言為設計者提供一種通用的語言n增加復用性,減少設計的多樣性增加復用性,減少設計的多樣性n增強設計變更的靈活性增強設計變更的靈活性n提高設計文檔的質(zhì)量提高設計文檔的質(zhì)量n增強設計的可理解性增強設計的可理解性12TP-52nDesign Patterns: Elements of Reusable Object-Oriented Software(Addison-Wesley,1995) n由由 Erich Gamma、Richard Helm、Ralph Johnson 和和 John Vlissides 合著
9、合著-四人幫?四人幫?n對軟件設計模式的研究造就了一本可能是面向?qū)浖O計模式的研究造就了一本可能是面向?qū)ο笤O計方面最有影響的書籍對象設計方面最有影響的書籍 13TP-52RequirementsAnalysisDesignImplementationArchitectureFrameworkDetailed DesignxKey:= secondary emphasisx = main emphasis14TP-52n廚房現(xiàn)代化廚房現(xiàn)代化n設計一個設計一個KitchenViewer軟件軟件n用戶可以自己布局廚房用戶可以自己布局廚房n不必拘泥于某一種形式不必拘泥于某一種形式15TP-52n用戶
10、單擊用戶單擊“壁柜壁柜”圖標圖標n程序在工作區(qū)中央顯示一個壁柜程序在工作區(qū)中央顯示一個壁柜n用戶調(diào)整壁柜大小用戶調(diào)整壁柜大小n拖動壁柜到指定位置拖動壁柜到指定位置n釋放光標釋放光標n應用程序定位壁柜位置(最近確定的位置)應用程序定位壁柜位置(最近確定的位置)n用戶單擊用戶單擊“立柜立柜”圖標圖標n程序在工作區(qū)中央顯示一個程序在工作區(qū)中央顯示一個“立柜立柜”n16TP-52壁柜壁柜臺面臺面地柜地柜現(xiàn)代現(xiàn)代古典古典古董古董工藝工藝menudisplay areastyles17TP-52 ModernClassicAntiqueArts & CraftsWall cabinetsFloor cab
11、inetsCountertop18TP-52 ModernClassicAntiqueArts & Crafts19TP-52nKitchenViewer的具體設計目標是什么?的具體設計目標是什么?nSolutions:q不管風格如何,繪制過程不應多次重復不管風格如何,繪制過程不應多次重復q是否可提供如是否可提供如renderKitchen(myStyle)方法方法q通過參數(shù)控制繪制過程通過參數(shù)控制繪制過程q因此,因此,q應用程序在運行時必須構造一個對象族:這個設計應用程序在運行時必須構造一個對象族:這個設計必須能夠在幾種風格中選擇!必須能夠在幾種風格中選擇!20TP-52KitchenCli
12、entrenderKitchen()FloorCabinet ModernWallCabinetModernFloorCabinetAntiqueFloorCabinetAntiqueWallCabinetWallCabinet 21TP-52/create the antique wall cabinetsAntiqueWallCabinet antiqueWallCabinet1 = new AntiqueWallCabinet();AntiqueWallCabinet antiqueWallCabinet2 = new AntiqueWallCabinet();/create the a
13、ntique floor cabinetsAntiqueFloorCabinet antiqueFloorCabinet1 = new AntiqueFloorCabinet();AntiqueFloorCabinet antiqueFloorCabinet2 = new AntiqueFloorCabinet();/創(chuàng)建廚房對象,假定add()方法已經(jīng)存在Kitchen antiqueKitchen = new Kitchen()antiqueKitchen.add( antiqueWallCabinet1,);antiqueKitchen.add( antiqueWallCabinet2,
14、);/render kitchen22TP-52Our design should be flexible enough to produce any of several kitchen styles.*足夠靈活的代碼,能夠產(chǎn)生幾種廚足夠靈活的代碼,能夠產(chǎn)生幾種廚房風格的任意一種房風格的任意一種23TP-52n不能單獨創(chuàng)建具體風格類的對象不能單獨創(chuàng)建具體風格類的對象n通過確定通過確定renderKitchen()方法的參數(shù)替代()方法的參數(shù)替代對象的創(chuàng)建對象的創(chuàng)建 new AntiqueWallCabinet(); / Only applies to antique style, Repla
15、ce!myStyle.getWallCabinet() ; /Applies to the style chosen at runtime! good!myStyle類決定了類決定了getWallCabinet()執(zhí)行的版本,產(chǎn)生合適的壁柜。執(zhí)行的版本,產(chǎn)生合適的壁柜。24TP-52n必須引入必須引入New ClassqKitchenStyleqMethods?q多態(tài)性在子類中的實現(xiàn)?多態(tài)性在子類中的實現(xiàn)?q考慮:如果考慮:如果myStyle是是ModernKStyle或或AntiqueKStyle的對象時,的對象時,運行中執(zhí)行操作有何不同?運行中執(zhí)行操作有何不同?AntiqueKStyleg
16、etWallCabinet()getFloorCabinet()KitchenStylegetWallCabinet()getFloorCabinet()ModernKStylegetWallCabinet()getFloorCabinet()25TP-52AntiqueKStylegetWallCabinet()getFloorCabinet()KitchenStylegetWallCabinet()getFloorCabinet()ModernKStylegetWallCabinet()getFloorCabinet()WallCabinet FloorCabinet AntiqueWal
17、lCabinetAntiqueFloorCabinetFloorCabinet getFloorCabinet() return new AntiqueFloorCabinet(); FloorCabinet getFloorCabinet() return new ModernFloorCabinet(); 26TP-52KitchenStylegetWallCabinet()getFloorCabinet()KitchengetWallCabinet()getFloorcabinet()ClientrenderKitchen( KitchenStyle )ModernKStylegetWa
18、llCabinet()getFloorCabinet()AntiqueKStylegetWallCabinet()getFloorCabinet()WallCabinet FloorCabinet ModernWallCabinetModernFloorCabinetAntiqueWallCabinetAntiqueFloorCabinet27TP-52nClient代碼中引用了代碼中引用了Kitchen,KitchenStyle,WallCabinet和和FloorCabinet類,但沒有引用具類,但沒有引用具體的風格類;體的風格類;n如何實現(xiàn)?如何實現(xiàn)?qmyStyle實例化,比如是類實例
19、化,比如是類ModernStyle的實例的實例q當方法當方法renderKitchenStyle()執(zhí)行到()執(zhí)行到nWallCabinet wallCabinet7 = myStyle.getWallCabinet();n可以明確地返回一個可以明確地返回一個ModernWall對象對象28TP-52/風格的確定通過實例化myStyle,KitchenStyle myStyle = new ModernKstyle();/ create the wall cabinetsWallCabinet WallCabinet1 = myStyle.getWallCabinet(); WallCabin
20、et WallCabinet2 = myStyle.getWallCabinet(); /create the floor cabinetsFloorCabinet FloorCabinet1 = myStyle.getFloorCabinet();FloorCabinet FloorCabinet2 = myStyle.getFloorCabinet();/創(chuàng)建廚房對象,假定add()方法已經(jīng)存在Kitchen kitchen = new Kitchen()kitchen.add(WallCabinet1,); kitchen.add(WallCabinet2,);kitchen.add(F
21、loorCabinet1,); kitchen.add(FloorCabinet2,);29TP-52nrenderKitchen()相比以前的版本更通用()相比以前的版本更通用n適用于所有風格適用于所有風格n重復代碼少重復代碼少n泛化一下泛化一下30TP-52StylegetComponentA()getComponentB()ClientdoOperation( Style myStyle )Style1getComponentA()getComponentB()Style2getComponentA()getComponentB()ComponentA ComponentBStyle1C
22、omponentAStyle1ComponentBStyle2ComponentAStyle2ComponentBCollection31TP-52nClient的的doOperation( Style myStyle )方法構建了一個方法構建了一個collection實例,例如實例,例如myStyle是是Style1類的對象類的對象nmyStyle的兩個操作將分別產(chǎn)生的兩個操作將分別產(chǎn)生Style1ComponentA和和Style1ComponentB對象對象n這種模式能夠始終確保一個協(xié)調(diào)的風格!這種模式能夠始終確保一個協(xié)調(diào)的風格!32TP-52StylegetComponentA()ge
23、tComponentB()ClientdoOperation()Style1getComponentA()getComponentB()Style2getComponentA()getComponentB()ComponentA ComponentBStyle1ComponentAStyle1ComponentBStyle2ComponentAStyle2ComponentBCollection getComponentA()getComponentB()沒有參數(shù)沒有參數(shù)聚合了聚合了Style類類不直接引不直接引用用Style類類運行時實運行時實例化例化33TP-52- class combi
24、nation and algorithm fulfilling a common design purpose.*通過類的組合和相關算法完成公共的通過類的組合和相關算法完成公共的設計目標設計目標 設計模式設計模式34TP-521. 客戶任務2. 建立任務ACA. Static viewpointB. Dynamic viewpoint3. 任務:設計模式的應用DB(i) Abstract level(ii) Concrete level(class model)(sequence or state diagram): Reference direction35TP-52n靜態(tài)觀點:解決如何創(chuàng)建
25、,由什么創(chuàng)建對象的靜態(tài)觀點:解決如何創(chuàng)建,由什么創(chuàng)建對象的問題問題n動態(tài)觀點:解決怎樣發(fā)揮模式的功能問題動態(tài)觀點:解決怎樣發(fā)揮模式的功能問題36TP-52AntiqueKStylegetWallCabinet()getFloorCabinet()KitchenStylegetWallCabinet()getFloorCabinet()ModernKStylegetWallCabinet()getFloorCabinet()WallCabinet FloorCabinet AntiqueWallCabinetAntiqueFloorCabinetFloorCabinet getFloorCabi
26、net() return new AntiqueFloorCabinet(); FloorCabinet getFloorCabinet() return new ModernFloorCabinet(); 37TP-52getWallCabinet()myStyle:KitchenStyleClientmyStyle:ModernKStylemyStyle:AntiqueKStylerenderKitchen( myStyle )wallCabinet1:ModernWallCabinetwallCabinet1:AntiqueWallCabinetModernWallCabinet()ge
27、tWallCabinet()AntiqueWallCabinet()myStyle.getWallCabinet()- IF myStyle BELONGS TO ModernKStyle - IF myStyle BELONGS TO AntiqueKStyle -38TP-52n抽象層抽象層n具體層具體層(非抽象層非抽象層)n分成兩層可以使用抽象層更加通用的類來編寫分成兩層可以使用抽象層更加通用的類來編寫客戶代碼,更具有通用性。客戶代碼,更具有通用性。39TP-52KitchenStyleKitchenClientModernKStyleAntiqueKStyleWallCabinet F
28、loorCabinet ModernWallCabinetModernFloorCabinetAntiqueWallCabinetAntiqueFloorCabinetAbstract levelConcrete level40TP-522. 客戶角色(誰來用設計模式)客戶角色(誰來用設計模式)*特定類的特定方法特定類的特定方法1. 設計模式應用設計模式應用Interface to the pattern (frequently abstract; possibly several classes)DPClientDPInterfaceRest of thedesign patternappl
29、icationInteracts with the design pattern only through its interface3. 運行時建立角色運行時建立角色 其他應用部分其他應用部分 No limitations41TP-52nDP的形式非常有限的形式非常有限q基于委托(基于委托(delegation)q基于遞歸(基于遞歸(recursion)42TP-52 new AntiqueWallCabinet(); / Only applies to antique style, Replace!myStyle.getWallCabinet() ; /Applies to the sty
30、le chosen at runtime! good!放棄直接調(diào)用,把構建操作委托給一個中間方法。 獲得靈活性!實現(xiàn)委托的通用方法:通過一個類把功能委托給一個抽象類如:創(chuàng)建WallCabinet對象委托給KitchenStyle對象(myStyle)的方法!43TP-52requiredFunction() intermediaryFunction( ) requiredFunction() ClientclientFunction() intermediaryFunction()replace clientFunction( ) intermediaryFunction( ) 44TP-52DoerBasedoIt()DPInterfaceinterfaceMethod()ConcreteDoer1doIt()ConcreteDoer2doIt(). . .doerObject interfaceMethod( ) doerObject.doIt() Client可能是ConcreteDoer1的一個對象!實現(xiàn)委托45TP-52RecursionBasedoOperation()Nonrec
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 生物強化曝氣系統(tǒng)行業(yè)跨境出海戰(zhàn)略研究報告
- 氯化聚乙烯橡膠環(huán)保升級企業(yè)制定與實施新質(zhì)生產(chǎn)力戰(zhàn)略研究報告
- 有機溶劑回收吸附樹脂行業(yè)深度調(diào)研及發(fā)展戰(zhàn)略咨詢報告
- 網(wǎng)絡安全與數(shù)據(jù)隱私法培訓行業(yè)跨境出海戰(zhàn)略研究報告
- 校園足球教練培訓班行業(yè)深度調(diào)研及發(fā)展戰(zhàn)略咨詢報告
- 武術搏擊學校企業(yè)制定與實施新質(zhì)生產(chǎn)力戰(zhàn)略研究報告
- 現(xiàn)代舞蹈編舞技巧提升營行業(yè)深度調(diào)研及發(fā)展戰(zhàn)略咨詢報告
- 汽車銷售與租賃培訓行業(yè)跨境出海戰(zhàn)略研究報告
- 2025年CRDIC系列探地雷達項目合作計劃書
- 氣舉作業(yè)工題庫復習測試有答案
- 基于STM32的室內(nèi)空氣質(zhì)量監(jiān)測系統(tǒng)的研究與實現(xiàn)
- 高考志愿填報指導高考志愿填報指南
- 辛集市騰藝竹木纖維墻板廠年產(chǎn)160萬平方米竹木纖維墻板項目環(huán)境影響報告表
- 保潔員巡查簽到表
- 2024年山東省濰坊市昌邑市中考一模數(shù)學試題
- 2024年4月自考10132電腦印刷設計試題
- GB/T 6346.1-2024電子設備用固定電容器第1部分:總規(guī)范
- 2024高考英語必背詞匯3500詞
- 中班音樂春天多美好
- 醫(yī)院培訓課件:《醫(yī)療廢物分類》
- 職業(yè)病健康培訓課件
評論
0/150
提交評論