第1章 設(shè)計模式概述_第1頁
第1章 設(shè)計模式概述_第2頁
第1章 設(shè)計模式概述_第3頁
第1章 設(shè)計模式概述_第4頁
第1章 設(shè)計模式概述_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、常文萃常文萃*設(shè)計模式的誕生與發(fā)展設(shè)計模式的誕生與發(fā)展 *設(shè)計模式的定義與分類設(shè)計模式的定義與分類 *GoF設(shè)計模式簡介設(shè)計模式簡介 *設(shè)計模式的優(yōu)點設(shè)計模式的優(yōu)點 *模式的誕生與定義模式的誕生與定義 *模式起源于建筑業(yè)而非軟件業(yè)模式起源于建筑業(yè)而非軟件業(yè)*模式模式(Pattern)(Pattern)之父之父美國加利佛尼亞大學(xué)環(huán)境結(jié)構(gòu)中心研究所所美國加利佛尼亞大學(xué)環(huán)境結(jié)構(gòu)中心研究所所長長Christopher AlexanderChristopher Alexander博士博士*A Pattern Language: Towns, Buildings, ConstructionA Patter

2、n Language: Towns, Buildings, Construction253253個建筑和城市規(guī)劃模式個建筑和城市規(guī)劃模式Christopher Alexanderw 模式的誕生與定義模式的誕生與定義 AlexanderAlexander給出了關(guān)于模式的經(jīng)典定義:每個模式給出了關(guān)于模式的經(jīng)典定義:每個模式都描述了一個都描述了一個在我們的環(huán)境中不斷出現(xiàn)的問題在我們的環(huán)境中不斷出現(xiàn)的問題,然后描述了該問題的然后描述了該問題的解決方案解決方案的核心,通過這種的核心,通過這種方式,我們可以無數(shù)次地重用那些已有的解決方方式,我們可以無數(shù)次地重用那些已有的解決方案,無需再重復(fù)相同的工作。案,

3、無需再重復(fù)相同的工作。 w 軟件模式軟件模式 19901990年,軟件工程界開始關(guān)注年,軟件工程界開始關(guān)注Christopher AlexanderChristopher Alexander等等在建在建筑與城市規(guī)劃領(lǐng)域的重大突破,最早將該模式的思想引入軟筑與城市規(guī)劃領(lǐng)域的重大突破,最早將該模式的思想引入軟件工程方法學(xué)的是件工程方法學(xué)的是1991-19921991-1992年以年以“四人組四人組( (Erich Erich Gamma, Gamma, Richard Helm, Ralph JohnsonRichard Helm, Ralph Johnson和和John John Vlissid

4、esVlissides)”)”自稱的自稱的四位著名軟件工程學(xué)者,他們在四位著名軟件工程學(xué)者,他們在19941994年歸納發(fā)表了年歸納發(fā)表了2323種在軟種在軟件開發(fā)中使用頻率較高的設(shè)計模式,旨在件開發(fā)中使用頻率較高的設(shè)計模式,旨在用模式來統(tǒng)一溝通用模式來統(tǒng)一溝通面向?qū)ο蠓椒ㄔ诜治觥⒃O(shè)計和實現(xiàn)間的鴻溝面向?qū)ο蠓椒ㄔ诜治?、設(shè)計和實現(xiàn)間的鴻溝。Erich Gamma蘇黎世大學(xué)計算機科學(xué)博士,是蘇黎世大學(xué)計算機科學(xué)博士,是Eclipse、 JUnit 等項目主要技術(shù)負(fù)責(zé)人之一。等項目主要技術(shù)負(fù)責(zé)人之一。John Vlissides斯坦福大學(xué)計算機科學(xué)博士,斯坦福大學(xué)計算機科學(xué)博士,原原IBM研究員,于

5、研究員,于2005年年11月月24日因腦瘤日因腦瘤去世,享年去世,享年44歲。歲。Ralph Johnson 墨爾本大學(xué)計算機科學(xué)博士,原墨爾本大學(xué)計算機科學(xué)博士,原IBM 研究研究員,現(xiàn)在波士頓顧問集團(tuán)供職。員,現(xiàn)在波士頓顧問集團(tuán)供職。Richard Helm康奈爾大學(xué)計算機科學(xué)博士,康奈爾大學(xué)計算機科學(xué)博士,伊利諾伊大學(xué)教授。伊利諾伊大學(xué)教授。軟件模式軟件模式 軟件模式是將模式的一般概念應(yīng)用于軟件開發(fā)領(lǐng)域,即軟件模式是將模式的一般概念應(yīng)用于軟件開發(fā)領(lǐng)域,即軟件軟件開發(fā)的總體指導(dǎo)思路或參照樣板開發(fā)的總體指導(dǎo)思路或參照樣板。軟件模式并非僅限于設(shè)計。軟件模式并非僅限于設(shè)計模式,還包括架構(gòu)模式、分

6、析模式和過程模式等。實際上,模式,還包括架構(gòu)模式、分析模式和過程模式等。實際上,在軟件生存期的每一個階段都存在著一些被認(rèn)同的模式在軟件生存期的每一個階段都存在著一些被認(rèn)同的模式。 軟件模式可以認(rèn)為是軟件模式可以認(rèn)為是對軟件開發(fā)這一特定對軟件開發(fā)這一特定“問題問題”的的“解法解法”的某種統(tǒng)一表示的某種統(tǒng)一表示,它和,它和AlexanderAlexander所描述的模式定義完全相所描述的模式定義完全相同,即同,即軟件模式等于一定條件下的出現(xiàn)的問題以及解法軟件模式等于一定條件下的出現(xiàn)的問題以及解法。 設(shè)計模式的發(fā)展設(shè)計模式的發(fā)展 19871987年年,Kent BeckKent Beck和和Ward

7、 CunninghamWard Cunningham借鑒借鑒AlexanderAlexander的模式思想在程的模式思想在程序開發(fā)中開始應(yīng)用一些模式序開發(fā)中開始應(yīng)用一些模式 ,在,在OOPSLAOOPSLA會議上發(fā)表了他們的成果。會議上發(fā)表了他們的成果。19901990年年,OOPSLAOOPSLA與與ECOOPECOOP聯(lián)合舉辦,聯(lián)合舉辦,Erich GammaErich Gamma和和Richard HelmRichard Helm等人等人開始討論有關(guān)模式的話題開始討論有關(guān)模式的話題(Bruce Anderson(Bruce Anderson主持主持) ),“四人組四人組” ” 正式成正式

8、成立,并開始著手進(jìn)行設(shè)計模式的分類整理工作。立,并開始著手進(jìn)行設(shè)計模式的分類整理工作。 1991 1991 年年,OOPSLAOOPSLA,Bruce AndersonBruce Anderson主持了首次針對設(shè)計模式的研討主持了首次針對設(shè)計模式的研討會會 。1992 1992 年年,OOPSLA OOPSLA ,AndersonAnderson再度主持研討會,模式已經(jīng)逐漸成為人再度主持研討會,模式已經(jīng)逐漸成為人們討論的話題。們討論的話題。 *設(shè)計模式的發(fā)展設(shè)計模式的發(fā)展 *19931993年,年,Kent Beck Kent Beck 和和 Grady Grady BoochBooch 贊助

9、了第一次關(guān)于設(shè)計模式的贊助了第一次關(guān)于設(shè)計模式的會議,這個設(shè)計模式研究組織發(fā)展成為著名的會議,這個設(shè)計模式研究組織發(fā)展成為著名的Hillside GroupHillside Group研究研究組。組。*19941994 年,由年,由Hillside GroupHillside Group發(fā)起,在美發(fā)起,在美國召國召開了第開了第1 1屆關(guān)于面向?qū)藐P(guān)于面向?qū)ο竽J降氖澜缧詴竽J降氖澜缧詴h議編編程語言模式會程語言模式會議。議。*19951995年年,“四人組四人組”出版了出版了設(shè)計模式:可復(fù)用面向?qū)ο筌浖幕O(shè)計模式:可復(fù)用面向?qū)ο筌浖幕A(chǔ)礎(chǔ)( (Design Patterns: Eleme

10、nts of Reusable Object-Oriented Design Patterns: Elements of Reusable Object-Oriented SoftwareSoftware) )一書,本書成為一書,本書成為19951995年最搶手的面向?qū)ο髸?,也成為設(shè)年最搶手的面向?qū)ο髸渤蔀樵O(shè)計模式的經(jīng)典書籍。計模式的經(jīng)典書籍。 *設(shè)計模式的發(fā)展設(shè)計模式的發(fā)展 *從從19951995年至今,設(shè)計模式在軟件開發(fā)中得以廣泛應(yīng)用,在年至今,設(shè)計模式在軟件開發(fā)中得以廣泛應(yīng)用,在SunSun的的Java Java SE/Java EESE/Java EE平臺平臺和和Microso

11、ftMicrosoft的的平臺平臺設(shè)計中就應(yīng)用了大量的設(shè)計設(shè)計中就應(yīng)用了大量的設(shè)計模式。模式。*誕生了越來越多的與設(shè)計模式相關(guān)的書籍和網(wǎng)站,設(shè)計模式也作為誕生了越來越多的與設(shè)計模式相關(guān)的書籍和網(wǎng)站,設(shè)計模式也作為一門獨立的課程或作為軟件體系結(jié)構(gòu)等課程的重要組成部分出現(xiàn)在一門獨立的課程或作為軟件體系結(jié)構(gòu)等課程的重要組成部分出現(xiàn)在國內(nèi)外研究生和大學(xué)教育的課堂上。國內(nèi)外研究生和大學(xué)教育的課堂上。*設(shè)計模式的定義設(shè)計模式的定義 *設(shè)計模式設(shè)計模式(Design Pattern)(Design Pattern)是一套是一套被反復(fù)使用、多數(shù)人知曉的、被反復(fù)使用、多數(shù)人知曉的、經(jīng)過分類編目的、代碼設(shè)計經(jīng)驗的

12、總結(jié)經(jīng)過分類編目的、代碼設(shè)計經(jīng)驗的總結(jié),使用設(shè)計模式是為了可,使用設(shè)計模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。*設(shè)計模式的基本要素設(shè)計模式的基本要素 *設(shè)計模式一般有如下幾個基本要素:設(shè)計模式一般有如下幾個基本要素:模式名稱模式名稱 (Pattern name) (Pattern name) 問題問題 (Problem) (Problem) 描述了應(yīng)該在何時使用模式。描述了應(yīng)該在何時使用模式。解決方案解決方案 (Solution) (Solution) 描述了設(shè)計的組成成分,描述了設(shè)計的組成成分,它們之間的相互關(guān)系及各自的

13、職責(zé)和協(xié)作方式。它們之間的相互關(guān)系及各自的職責(zé)和協(xié)作方式。效果效果 (Consequences) (Consequences) 包括包括模式模式對對系統(tǒng)的靈活性、系統(tǒng)的靈活性、擴充性或可移植性的擴充性或可移植性的影響影響。*設(shè)計模式學(xué)習(xí)步驟設(shè)計模式學(xué)習(xí)步驟 :問題提出問題提出問題分析問題分析 解決方案解決方案設(shè)計模式應(yīng)用設(shè)計模式應(yīng)用 設(shè)計模式的分類(一)設(shè)計模式的分類(一)根據(jù)目的可根據(jù)目的可分為創(chuàng)建分為創(chuàng)建型,結(jié)構(gòu)型和型,結(jié)構(gòu)型和行為行為型三型三種:種: 創(chuàng)建型模式主要用于創(chuàng)建型模式主要用于創(chuàng)建對象創(chuàng)建對象。 結(jié)構(gòu)型模式主要用于結(jié)構(gòu)型模式主要用于處理類或?qū)ο蟮慕M合處理類或?qū)ο蟮慕M合。 行為型

14、模式主要用于行為型模式主要用于描述對類或?qū)ο笤鯓咏换ズ驮鯓臃峙渎毭枋鰧︻惢驅(qū)ο笤鯓咏换ズ驮鯓臃峙渎氊?zé)責(zé)。設(shè)計模式的分類(二)設(shè)計模式的分類(二)根據(jù)根據(jù)范圍范圍,即模式主要是用于處理類之間關(guān)系還是處理對象之間,即模式主要是用于處理類之間關(guān)系還是處理對象之間的關(guān)系,可分為的關(guān)系,可分為類模式類模式和和對象模式對象模式兩種:兩種:類模式類模式處理類和子類之間的關(guān)系處理類和子類之間的關(guān)系,這些關(guān)系通過繼承建立,在,這些關(guān)系通過繼承建立,在編譯時刻就被確定下來,是屬于編譯時刻就被確定下來,是屬于靜態(tài)靜態(tài)的。的。 對象模式對象模式處理對象間的關(guān)系處理對象間的關(guān)系,這些關(guān)系在運行時刻變化,更具,這些關(guān)系在

15、運行時刻變化,更具動態(tài)動態(tài)性。性。 范圍范圍目的目的創(chuàng)建型模式創(chuàng)建型模式結(jié)構(gòu)型模式結(jié)構(gòu)型模式行為型模式行為型模式類模式類模式工廠方法模式工廠方法模式(類)(類)適配器模式適配器模式解釋器模式解釋器模式模板方法模式模板方法模式對象模式對象模式抽象工廠模式抽象工廠模式建造者模式建造者模式原型模式原型模式單例模式單例模式(對象)適配器模式(對象)適配器模式橋接模式橋接模式組合模式組合模式裝飾模式裝飾模式外觀模式外觀模式享元模式享元模式代理模式代理模式職責(zé)鏈模式職責(zé)鏈模式命令模式命令模式迭代器模式迭代器模式中介者模式中介者模式備忘錄模式備忘錄模式觀察者模式觀察者模式狀態(tài)模式狀態(tài)模式策略模式策略模式訪問

16、者模式訪問者模式*設(shè)計模式是從許多優(yōu)秀的軟件系統(tǒng)中總結(jié)出的設(shè)計模式是從許多優(yōu)秀的軟件系統(tǒng)中總結(jié)出的成功的設(shè)計方案成功的設(shè)計方案,融合了眾多融合了眾多專家的經(jīng)驗專家的經(jīng)驗,并以一種,并以一種標(biāo)準(zhǔn)的形式標(biāo)準(zhǔn)的形式供廣大開發(fā)人員所用,使得設(shè)計方案更加供廣大開發(fā)人員所用,使得設(shè)計方案更加通俗易懂。通俗易懂。*設(shè)設(shè)計模式使人們可計模式使人們可以更加簡單方便地復(fù)用成功的設(shè)計和體系結(jié)構(gòu)以更加簡單方便地復(fù)用成功的設(shè)計和體系結(jié)構(gòu),并,并避免那避免那些導(dǎo)致不可重用的設(shè)計方案。些導(dǎo)致不可重用的設(shè)計方案。*設(shè)計模式使得設(shè)計模式使得設(shè)計方案更加靈活,且易于修改設(shè)計方案更加靈活,且易于修改。能。能提提高軟件系統(tǒng)的開發(fā)效率

17、高軟件系統(tǒng)的開發(fā)效率和軟件質(zhì)量和軟件質(zhì)量,且在一定程度上,且在一定程度上節(jié)約設(shè)計成本節(jié)約設(shè)計成本。 *設(shè)計模式有助于初學(xué)者更深入地理解面向?qū)ο笏枷朐O(shè)計模式有助于初學(xué)者更深入地理解面向?qū)ο笏枷?,提,提高軟件的設(shè)計水平和高軟件的設(shè)計水平和代碼質(zhì)量。代碼質(zhì)量。*1.1.命名空間命名空間 命名空間相當(dāng)于一個容器,它包含一組定義的類或結(jié)構(gòu),命名命名空間相當(dāng)于一個容器,它包含一組定義的類或結(jié)構(gòu),命名空間也可以嵌套在另一個命名空間中,就像文件目錄一樣。具有相空間也可以嵌套在另一個命名空間中,就像文件目錄一樣。具有相同名稱的類如果在不同的命名空間中,調(diào)用時不會產(chǎn)生混淆。同名稱的類如果在不同的命名空間中,調(diào)用時

18、不會產(chǎn)生混淆。在在C C# #中中,一般在程序的開頭使用關(guān)鍵字,一般在程序的開頭使用關(guān)鍵字using using 來引入命名空間,然后就來引入命名空間,然后就可以自由地使用命名空間下的各種類。這些命名空間大多數(shù)有一個可以自由地使用命名空間下的各種類。這些命名空間大多數(shù)有一個頂級的命名空間頂級的命名空間SystemSystem。 引入命名空間的語句是:引入命名空間的語句是:using using 命名空間命名空間;以下是一個控制臺應(yīng)用程序生成的幾個命名空間:以下是一個控制臺應(yīng)用程序生成的幾個命名空間:SystemSystem:包含基本類和基類,定義常用的數(shù)據(jù)類型、數(shù)據(jù)轉(zhuǎn)換、數(shù)包含基本類和基類,定

19、義常用的數(shù)據(jù)類型、數(shù)據(jù)轉(zhuǎn)換、數(shù)學(xué)運算、異常處理等。學(xué)運算、異常處理等。System.Collections.GenericSystem.Collections.Generic:包含定義泛型集合的接口和類。:包含定義泛型集合的接口和類。System.LinqSystem.Linq: 提供支持使用語言集成查詢提供支持使用語言集成查詢 (LINQ) (LINQ) 進(jìn)行查詢的類進(jìn)行查詢的類和接口和接口System.TextSystem.Text:包含包含ASCIIASCII、UnicodeUnicode、UTF-7UTF-7、UTF-8UTF-8字符編碼的類和字符編碼的類和用于字符處理的類用于字符處理

20、的類*2.2.接接口口 (P(P355355) )接口是一組方法和屬性的集合。對于行為跨越不同類的對象,可以使接口是一組方法和屬性的集合。對于行為跨越不同類的對象,可以使用接口。就象類是對對象的抽象一樣,接口是對行為的抽象。用接口。就象類是對對象的抽象一樣,接口是對行為的抽象。(1)聲明一個接口)聲明一個接口 接口用接口用interface聲明,接口名稱前要加大寫字母聲明,接口名稱前要加大寫字母I,接口中的方法,接口中的方法或?qū)傩郧懊婊驅(qū)傩郧懊娌荒懿荒苡行揎椃椒ㄓ行揎椃?,方法沒有沒有方法體。方法體。例:例:叮當(dāng)貓從肚皮的口袋里變東西、孫悟空可以拔根毫毛變東西有叮當(dāng)貓從肚皮的口袋里變東西、孫悟空可以拔根毫毛變東西有72變、豬八戒能變、豬八戒能36變,他們都能變東西,但屬于不同的類。理論上講,變,他們都能變東西,但屬于不同的類。理論上講,分別屬于貓類、猴類、豬類,都是動物類的子類。若在動物類中定義分別屬于貓類、猴類、豬類,都是動物類的子類。若在動物類中定義變東西的方法,則所有的動物都得繼承這個能變東西的方法,顯然不變東西的方法,則所有的動物都得繼承這個能變東西的方法,顯然不合理,所以需要定義一個合理,所以需要定義一個“變東西變東西” 的接口的接口IChange:interface Ichange /默認(rèn)是默認(rèn)是public的的 stri

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論