




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第11章 設(shè)計模式展望本書講解了設(shè)計模式,同時也介紹了C#3.0這一現(xiàn)代編程語言的一些高級特性。在很多時候,我們都會發(fā)現(xiàn)語言對模式的實現(xiàn)提供了大量幫助。在最后這一章,我們將回顧一下這些模式以及它們所需要的語言特性,然后展望一下研究人員正在為語言的下一輪迭代準備什么東西。模式總結(jié)現(xiàn)在是作一下總結(jié)的時候了,我們將總結(jié)本書中所有的設(shè)計模式以及用于實現(xiàn)它們的語言特性。有必要重復(fù)一下:在某些情形中,本書中的模式實現(xiàn)跟基于Java、C+或早期版本的C#語言的傳統(tǒng)實現(xiàn)形式相比,有很大的差別。因此,你應(yīng)該把表11-1的“語言特性”一欄理解為“現(xiàn)代的、適當?shù)?、合乎需要的”,而不是“固定的、標準的、唯一的”。這個
2、表格對本書中所有的理論代碼作了一次有用的比較,你也可以在本書的網(wǎng)站上(http:/patterns.cs.up.ac.za)找到這些代碼。第四欄中斜體的語言特性是用在其它的可選實現(xiàn)方案或示例代碼中的,它們在基本的理論代碼中沒有用到。大多數(shù)語言特性都以復(fù)數(shù)形式給出(原作者在列舉語言特性時,使用的都是英文單詞的復(fù)數(shù)形式,譯者注),但實際使用時可能只用到某種特性的單個實例,這取決于系統(tǒng)的尺寸。這一表格是按照語言特性的難易程度排列的,因此你可以得到哪種模式基于語言知識更易實現(xiàn)的直觀感覺;但是,不要把這一標準跟模式本身的難易相混淆。我個人的經(jīng)驗是,出現(xiàn)在表格上半部分的適配器(Adapter)和訪問者(V
3、isitor)模式,是兩種實現(xiàn)起來頗具挑戰(zhàn)性的模式。其難點主要在于類型之間的相互作用,因為這兩種模式的目標都是類型解耦。在C#這種提供嚴格類型檢查的語言中,即使不考慮泛型,也需要相當細心才能確保參數(shù)和對象實例的正確匹配。表11-1 模式和語言特性總結(jié)(第二欄為譯者加,以方便對照)模式模式(英文)語言特性可選的和示例中使用的抽象工廠Abstract Factory接口泛型、泛型約束 橋接Bridge接口擴展方法生成器Builder接口泛型、泛型約束裝飾器Decorator接口工廠方法Factory Method接口適配器Adapter接口、繼承委托、匿名函數(shù)、線程、事件代理Proxy接口、私有訪
4、問集合類狀態(tài)State接口、選擇語句策略Strategy接口、選擇語句泛型、可空類型解釋器Interpreter遞歸、選擇語句訪問者Visitor接口、遞歸反射外觀Facade命名空間單例Singleton私有訪問、嵌套類、靜態(tài)屬性模板方法Template Method方法重寫命令Command委托中介Mediator委托線程觀察者Observer接口、委托、事件線程享元Flyweight接口、結(jié)構(gòu)、集合類、索引器隱式類型推導(dǎo)、初始化式、匿名類型備忘錄Memento序列化、集合類、索引器原型Prototype克隆、序列化、集合類、索引器責(zé)任鏈Chain of Responsibility泛型、
5、異常枚舉類型、初始化式組合Composite接口、集合類、泛型、屬性 迭代器Iterator枚舉器、foreach、查詢表達式 (Linq)泛型、遞歸另外一種考查模式的方式是分析它們與哪些模式交互,或者它們支持哪些模式。表11-2從這一角度給出了一些模式分組的思想,盡管帶有一點主觀性。表11-2 模式交互模式與其交互或被其支持的模式抽象工廠橋接, 工廠方法, 原型, 單例適配器橋接抽象工廠生成器組合責(zé)任鏈組合命令備忘錄, 組合組合生成器, 裝飾器, 享元, 解釋器, 訪問者, 責(zé)任鏈, 命令, 迭代器裝飾器組合, 策略外觀單例工廠方法抽象工廠, 模板方法享元組合, 解釋器, 策略, 狀態(tài)解釋器
6、組合, 享元, 訪問者迭代器訪問者, 備忘錄, 組合中介觀察者備忘錄迭代器, 命令觀察者中介原型抽象工廠代理單例外觀, 抽象工廠狀態(tài)享元策略裝飾器, 享元, 模板方法模板方法工廠方法, 策略訪問者迭代器, 組合, 解釋器跟其它模式交互最多的是那些創(chuàng)建和管理復(fù)雜結(jié)構(gòu)的模式,比如組合(Composite)、享元(Flyweight)和抽象工廠(Abstract Factory),這并不令人奇怪。當有多種類型需要處理的時候,許多其它的模式也依賴這些模式。表中適配器(Adapter)和代理(Proxy)模式?jīng)]有列出與其交互的模式,但不要忘了這種兩種模式也是來自于相互關(guān)聯(lián)的多個設(shè)計。本書的特點之一是對每
7、一種模式都給出了實例演示。也有一些示例被用在多個模式中,從而演示了上面所描述的模式交互。通過這種方式,我們可以在多樣性和連續(xù)性之間盡量保持平衡。在許多練習(xí)中,我建議使用其它模式對示例進行改編。特別的,單例(Singleton)模式在本書中沒有被大量使用,而它是一個很適合被應(yīng)用到已有程序的模式。為方便引用,表11-3列舉了本書所使用的示例以及使用它們的模式。表11-3 演示模式的示例Example博客觀察者聊天室中介課程成績評估訪問者、解釋器家族樹迭代器Gucci 和Poochy (產(chǎn)品制造)抽象工廠、生成器菜單系統(tǒng)命令Mirrors解釋器相片裝飾器、相片庫、相片組、相片集合裝飾器、組合、享元、
8、外觀、原型、適配器RCP游戲、Tic-Tac-Toe游戲狀態(tài)、備忘錄海鳥飛機適配器排序演示器策略、模板方法鱷梨采購工廠方法SpaceBook、Openbook、Coolbook代理、橋接、適配器Trusty Bank責(zé)任鏈練習(xí)總結(jié)和制表是從諸多模式中理出頭緒的有效方法。你可以嘗試下面兩個任務(wù):1.制作一個模式表格,分別用一句話描述每種模式的任務(wù);2.制作一個模式表格,列舉每種模式的參與者,每種模式不必超過4種(不能重復(fù),不考慮Client)。設(shè)計模式展望我將通過一些跟設(shè)計模式及其發(fā)展方向有關(guān)的結(jié)論來結(jié)束本書。我們已經(jīng)看到,設(shè)計模式是一種形式化的機制,這種機制以文檔的形式總結(jié)了常見軟件設(shè)計問題的
9、解決方案。1977年,Christopher Alexander在民用建筑(civil architecture)中首次提出了設(shè)計模式的概念;它們后來被改編到軟件設(shè)計中。在過去的幾年里,設(shè)計模式在學(xué)術(shù)和商業(yè)領(lǐng)域的影響都獲得了顯著提高,而且大量的研究者對設(shè)計模式進行了分類研究。設(shè)計模式通常被看作軟件設(shè)計問題的解決方案。它們當然不是軟件設(shè)計的唯一解決方案,而且它們也不應(yīng)該被用來排斥其它方案?;诮M件的設(shè)計、軟件架構(gòu)、面向方面編程以及重構(gòu),這些在軟件設(shè)計中都具有同樣重要的地位。從軟件工程的大背景來看,可以認為,設(shè)計模式也提出了如下一些來自模式自身的挑戰(zhàn):可跟蹤性(Traceability)如果編程語
10、言提供的支持很少,設(shè)計模式的可跟蹤性將難以保證。在一種編程語言中,某個設(shè)計模式的邏輯實現(xiàn)可能被分散到很多類中,導(dǎo)致難以跟蹤。從這方面來看,通過使用C#語言的一些更加簡潔的特性,比如委托和查詢表達式,本書中的實現(xiàn)已經(jīng)取得了很大的進步。可重用性(Reusability)設(shè)計模式在軟件系統(tǒng)的設(shè)計中被使用并重用,但來自語言的支持卻很少,開發(fā)者必需通過一種編程語言一遍又一遍地實現(xiàn)模式?;诮M件的開發(fā)可以封裝行為并直接重用,而設(shè)計模式并不能向開發(fā)者提供同樣的便利??删幋a性(Writability)設(shè)計模式中有很多方法的行為非常簡單。如果沒有好的編程工具,編寫和維護這些代碼非常乏味。再一次,使用更加簡潔和強
11、大的語言特性可以減輕程序員的負擔(dān)。可維護性(Maintainability)使用多種模式會導(dǎo)致出現(xiàn)大量相互依賴的類。而使用傳統(tǒng)面向?qū)ο缶幊陶Z言的時候,相互依賴的類則可能引發(fā)維護問題。最新的研究中,人們正在考慮如何將設(shè)計模式轉(zhuǎn)換成可重用的實體,從而開發(fā)者不必反復(fù)地實現(xiàn)同一種模式。在1997年,Bertrand Meyer將可重用性定義為“軟件元素可用于構(gòu)造多種不同應(yīng)用的能力”。在設(shè)計模式的上下文中,一種特定的語言特性、一種語言的庫或者一個組件都可以用于解決模式實現(xiàn)的可重用性問題。Meyer繼續(xù)指出,“如果能實現(xiàn)一個可重用的組件來提供一個模式所需的所有功能”,那么這種設(shè)計模式“就是可組件化的”,他
12、還指出,“一個成功的模式不應(yīng)該僅僅是書面描述,它必需是一個軟件組件,或者一套組件?!边@一工作仍在進行中。通過本書我們還看到,語言一直在向前演化。迭代器(Iterator)模式現(xiàn)在被C# 3.0全面支持,直接支持單例(Singleton)模式的可行思路也存在了。后面還可能有其它的模式被支持,模式和語言的集成是一個碩果累累的研究領(lǐng)域。結(jié)束語本書帶你走過了23種設(shè)計模式(有的還帶有額外的變種),25個C#語言特性,20個示例和25段理論代碼?,F(xiàn)在,在C#3.0中,你應(yīng)該能夠從設(shè)計模式中受益了。設(shè)計模式能在以下方面帶來很多好處:*提高設(shè)計的可重用性;*提供一組公共的詞匯,便于項目組內(nèi)部或項目組之間進行交流;*便于文檔撰寫;*幫助開發(fā)者對系統(tǒng)進行重新組織,不管系統(tǒng)之前是否使用
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 城鄉(xiāng)結(jié)合部出租房屋合同定金范本
- 房產(chǎn)交易三方合同托管實施細則
- 保密條款合同模板:代理合作中的商業(yè)與技術(shù)秘密
- 廣告撲克牌批量生產(chǎn)合同
- 貸款擔(dān)保合同協(xié)議
- 河南標準個人借款合同樣本規(guī)范
- 度商業(yè)合同范本:經(jīng)濟適用房交易
- 股權(quán)轉(zhuǎn)讓合同范本(標準文本)
- 采購供應(yīng)合同書其二
- 與營銷策略的區(qū)別與應(yīng)用考核試卷
- 2025年江蘇南京技師學(xué)院招聘工作人員19人高頻重點模擬試卷提升(共500題附帶答案詳解)
- 華東師大版七年級數(shù)學(xué)下冊“第1周周考”
- DBJ50-T-385-2023半柔性復(fù)合路面技術(shù)標準
- 職業(yè)院校教師人工智能素養(yǎng):內(nèi)涵流變、框架構(gòu)建與生成路徑
- 如何在初中數(shù)學(xué)教學(xué)中提升學(xué)生的核心素養(yǎng)
- (完整版)小學(xué)一年級數(shù)學(xué)20以內(nèi)進退位加減法(1600道題)計算卡
- 2025年包頭鐵道職業(yè)技術(shù)學(xué)院高職單招語文2018-2024歷年參考題庫頻考點含答案解析
- 北京2024年北京市測繪設(shè)計研究院面向應(yīng)屆生招聘筆試歷年參考題庫附帶答案詳解
- 2025年減速機齒輪項目投資可行性研究分析報告
- 走進李白校本 課程設(shè)計
- 2025新人教版英語七年級下單詞默寫單(小學(xué)部分)
評論
0/150
提交評論