設(shè)計(jì)模式論文_第1頁
設(shè)計(jì)模式論文_第2頁
設(shè)計(jì)模式論文_第3頁
設(shè)計(jì)模式論文_第4頁
設(shè)計(jì)模式論文_第5頁
已閱讀5頁,還剩7頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第一章設(shè)計(jì)模式的簡介21.1 什么是設(shè)計(jì)模式21.2 設(shè)計(jì)模式的基本要素21.3 學(xué)習(xí)設(shè)計(jì)模式的重要性21.4 面向?qū)ο蟮奶卣?1.4.1 封裝31.4.2 繼承31.4.3 多態(tài)3第二章面向?qū)ο蟮膸讉€(gè)基本原則42.1 面向抽象原則42.2 “開-閉”原則42.3 “多用組合,少用繼承”原則42.4 “高內(nèi)聚-弱耦合”原則5第三章設(shè)計(jì)模式分類53.1 行為型模式53.2 結(jié)構(gòu)型模式53.3 創(chuàng)建型模式63.4 工廠模式情景舉例63.4.1 設(shè)計(jì)要求63.4.2 設(shè)計(jì)實(shí)現(xiàn)7第四章設(shè)計(jì)模式學(xué)習(xí)總結(jié)10致謝10參考文獻(xiàn)1112第一章設(shè)計(jì)模式的簡介1.1 什么是設(shè)計(jì)模式設(shè)計(jì)模式(Designpatte

2、rn)是一套被反復(fù)使用、多數(shù)人知曉的、經(jīng)過分類編目的、代碼設(shè)計(jì)經(jīng)驗(yàn)的總結(jié)。使用設(shè)計(jì)模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。設(shè)計(jì)面向?qū)ο筌浖容^困難,而設(shè)計(jì)可復(fù)用的面向?qū)ο筌浖透永щy,你必須先找出有關(guān)的對象,以適當(dāng)?shù)牧6葘⑺麄儦w類,在定義的接口和繼承類,建立對象之間的相互關(guān)系。你的設(shè)計(jì)應(yīng)該對手頭的問題有針對性,同時(shí)對將來的問題有足夠的通用性。設(shè)計(jì)出盡可能少的重復(fù)設(shè)計(jì)模式。有經(jīng)驗(yàn)的面向?qū)ο笤O(shè)計(jì)者能做出良好的設(shè)計(jì),二新手則面對眾多選擇無從下手。設(shè)計(jì)模式使人們可以更加簡單方便地復(fù)用成功的設(shè)計(jì)和體系結(jié)構(gòu)。1.2 設(shè)計(jì)模式的基本要素記錄一個(gè)設(shè)計(jì)模式需要4個(gè)基本要素:(1)名稱:一

3、個(gè)模式的名稱高度包括該模式的本質(zhì),有利于該行業(yè)統(tǒng)一術(shù)語、便于交流使用。( 2) 問題:描述應(yīng)該在何時(shí)使用模式,解釋設(shè)計(jì)問題和問題存在的前因后果,描述在怎樣的環(huán)境下使用該模式。( 3) 方案:描述設(shè)計(jì)的組成部分、他們之間的相互關(guān)系及各自的職責(zé)和協(xié)作方式。( 4) 效果:描述模式的應(yīng)用效果及使用模式應(yīng)該權(quán)衡的問題。主要效果包括使用模式對系統(tǒng)的靈活性、擴(kuò)充性和復(fù)用性的影響。1.3 學(xué)習(xí)設(shè)計(jì)模式的重要性一個(gè)好的設(shè)計(jì)系統(tǒng)往往是易維護(hù)、易擴(kuò)展、易復(fù)用的,學(xué)習(xí)好設(shè)計(jì)模式對提高設(shè)計(jì)能力無疑是非常有幫助的。設(shè)計(jì)模式的目的不是針對軟件設(shè)計(jì)和開發(fā)中的每個(gè)問題都給出解決方案,而是針對某種特定環(huán)境中通常都會遇到的某種軟

4、件開發(fā)問題給出可用的一些解決方案,因此學(xué)習(xí)設(shè)計(jì)模式不僅可以使我們使用好這些成功的模式,更重要的是可以是我們更加深刻地理解面向?qū)ο蟮脑O(shè)計(jì)思想,非常有利于我們更好的使用面向?qū)ο笳Z言解決設(shè)計(jì)中的問題。1.4 面向?qū)ο蟮奶卣麟S著計(jì)算機(jī)硬件設(shè)備功能的進(jìn)一步提高,使得基于對象的編程成為可能(面向?qū)ο笳Z言編寫的程序需要消耗更多的內(nèi)存,需要更快的CPU保證其運(yùn)行速度)?;趯ο蟮木幊谈臃先说乃季S模式,使用面向?qū)ο笳Z言可以編寫易維護(hù)、易擴(kuò)展和易復(fù)用的程序代碼,更重要的是,面向?qū)ο缶幊坦膭?lì)創(chuàng)造性的程序設(shè)計(jì)。1.4.1 封裝面向?qū)ο缶幊痰暮诵乃枷胫痪褪菍?shù)據(jù)核對數(shù)據(jù)的操作封裝在一起。通過抽象,即從具體的實(shí)例中

5、抽取共同的性質(zhì)形成一般的概念比如,類的概念。1.4.2 繼承繼承是一種由已有的類定義出新類的機(jī)制。利用繼承,可以先定義一個(gè)共有屬性的一般類,根據(jù)該一般類再定義具有特殊屬性的子類,子類繼承一般類的屬性和行為,并根據(jù)需要增加他自己的心得屬性和行為。由繼承而得到的類稱為子類,被繼承的類稱為父類(超類)。Java不支持多重繼承,即子類只能有一個(gè)父類(與C+不同)。1.4.3 多態(tài)多態(tài)是面向?qū)ο缶幊痰挠忠环N重要特征。有兩種意義的多態(tài)。一種是操作名稱的多態(tài),即有多個(gè)操作具有相同的名字,但這些操作所接受的消息類型必須不同。所謂操作名稱的多態(tài)性,是指可以向操作傳遞不同的消息,以便讓對象根據(jù)響應(yīng)的消息來產(chǎn)生相應(yīng)

6、的行為。另一種是和繼承有關(guān)的多態(tài),是指同一個(gè)操作被不同類型對象調(diào)用時(shí)可能產(chǎn)生不同的行為。第二章面向?qū)ο蟮膸讉€(gè)基本原則2.1 面向抽象原則所謂面向?qū)ο缶幊?,是指?dāng)設(shè)計(jì)一個(gè)類時(shí),不讓該類面向具體的類,而是面向抽象類或接口,即所設(shè)計(jì)類中的重要數(shù)據(jù)是抽象類或接口聲明的變量,而不是具體類聲明的變量。2.2 “開-閉”原則所謂“開-閉”原則,就是讓我們的設(shè)計(jì)對擴(kuò)展開放,對修改關(guān)閉。實(shí)際上這句話的本質(zhì)是指當(dāng)一個(gè)設(shè)計(jì)中增加新的模塊時(shí),不需要修改現(xiàn)有的模塊。在給出一個(gè)設(shè)計(jì)時(shí),應(yīng)當(dāng)首先考慮到用戶需求的變化,將應(yīng)對用戶變化的部分設(shè)計(jì)為對擴(kuò)展開放,而設(shè)計(jì)的核心部分是經(jīng)過精心考慮之后確定下來的基本結(jié)構(gòu),這部分應(yīng)當(dāng)是對修

7、改關(guān)閉的,即不能因?yàn)橛脩舻男枨笞兓侔l(fā)生變化,因?yàn)檫@部分不是用來應(yīng)對需求變化的。如果一個(gè)設(shè)計(jì)遵守了“開-閉”原則,那么一定是易維護(hù)的,因?yàn)樵谠O(shè)計(jì)中增加新的模塊時(shí),不必去修改設(shè)計(jì)中的核心模塊。2.3 “多用組合,少用繼承”原則在許多設(shè)計(jì)中,人們希望系統(tǒng)的類之間盡量使耦合關(guān)系,而不希望是強(qiáng)耦合關(guān)系。設(shè)計(jì)的底層結(jié)構(gòu)中通常會出現(xiàn)較多的繼承結(jié)構(gòu),而許多應(yīng)用層需要避開繼承的缺點(diǎn),而需要組合的優(yōu)點(diǎn)。要合理的使用組合,而不是使用繼承來獲得方法的復(fù)用,需要經(jīng)過一定時(shí)間的認(rèn)真思考、學(xué)習(xí)和編程實(shí)踐。2.4 “高內(nèi)聚-弱耦合”原則如果類中的方法是一組相關(guān)的行為,則稱該類是高內(nèi)聚的,反之稱為低內(nèi)聚'高內(nèi)聚便于

8、類的維護(hù),而低內(nèi)聚不利于類的維護(hù)。弱耦合就是盡量不要讓一個(gè)類含有太多的其他類的實(shí)力的引用,以避免修改系統(tǒng)的其中一部分會影響到其他部分。第三章設(shè)計(jì)模式分類3.1 行為型模式行為型模式涉及怎樣合理的設(shè)計(jì)對象之間的交互通信,以及怎樣合理地為對象分配職責(zé),讓設(shè)計(jì)富有彈性、易維護(hù)、易復(fù)用。(1) )策略模式(2) 狀態(tài)模式(3) 命令模式(4) 中介者模式(5) 責(zé)任鏈模式(6) 模板方法模式(7) 觀察者模式(8) 訪問者模式3.2 結(jié)構(gòu)型模式結(jié)構(gòu)型模式涉及如何組合類和對象以形成更大的結(jié)構(gòu),和類有關(guān)的結(jié)構(gòu)型模式設(shè)計(jì)如何合理點(diǎn)的使用繼承機(jī)制,和對象有關(guān)的結(jié)構(gòu)型模式涉及如何合理的使用對象機(jī)制。(1) )裝

9、飾模式(2) 組合模式(3) 適配器模式(4) 外觀模式(5) 代理模式(6) 享元模式(7) 橋接模式3.3 創(chuàng)建型模式創(chuàng)建型模式涉及對象的實(shí)例化,這類模式的特點(diǎn)是:不讓用戶代碼依賴于對象的創(chuàng)建或排列方式,避免用戶直接使用new運(yùn)算符創(chuàng)建對象。(1) )工廠方法模式(2) 抽象工廠模式(3) 生成器模式(4) 原型模式(5) 單間模式3.4 工廠模式情景舉例適合使用工廠方法模式的情景:(1)用戶需要一個(gè)類的子類的實(shí)例,但不希望該類的子類形成耦合。(2)用戶需要一個(gè)類的子類的實(shí)例,但用戶不知道該類有哪些子類可用。3.4.1 設(shè)計(jì)要求系統(tǒng)目前已經(jīng)按照有關(guān)藥品的規(guī)定設(shè)計(jì)一個(gè)抽象類Drug,該抽象類

10、特別規(guī)定了所創(chuàng)建的藥品必須給出藥品的成分及含量。Drug目前有兩個(gè)子類:Paracetamol和Amorolfine。Paracetamol子類負(fù)責(zé)創(chuàng)建氨咖黃敏一類的藥品;Amorolfine子類負(fù)責(zé)創(chuàng)建鹽酸阿莫羅芬一類的藥品。一個(gè)為某藥品開發(fā)的應(yīng)用程序需要使用Drug類的某個(gè)子類的實(shí)例為用戶提供藥品,但是藥店的應(yīng)用程序不能使用Drug的子類的構(gòu)造方法直接創(chuàng)建對象,因?yàn)樗幍隂]有能力給出藥品的各個(gè)成分的含量,只有藥廠才有這樣的能力。請使用工廠方法模式偉已有系統(tǒng)編寫一個(gè)抽象類,并在其中定義工廠方法,該工廠方法返回Drug類的子類的實(shí)例。3.4.2 設(shè)計(jì)實(shí)現(xiàn)1. 抽象產(chǎn)品按照工廠方法模式,Drug類

11、是工廠方法模式中的抽象產(chǎn)品角色,碼:Drug.javapublicabstractclassDrugStringconstitute;Stringname;publicStringgetName()returnname;publicStringgetConstitute()returnconstitute;2. 具體產(chǎn)品按照工廠方法模式,Paracetamo類和Amorolfine類是產(chǎn)品角色,碼:Paracetamol.javapublicclassParacetamolextendsDrugStringpart仁"每粒含乙酰氨基酚"Stringpart2="每

12、粒含咖啡因"Stringpart3="每粒含人工牛黃"Stringpart4="每粒含馬來酸氯苯"publicParacetamol(Stringname,inta)=name;part仁part+":"+aO+"毫克n"part2=part+":"+a1+"毫克n"part3=part+":"+a2+"毫克n"part4=part+":"+a3+"毫克n"consti

13、tute=part1+part2+part3+part4;Drug類代Amorolfine.javapublicclassAmorolfineextendsDrugStringpart仁"每粒含甲硝唑"Stringpart2="每粒含人工牛黃"publicAmorolfine(Stringname,inta)=name;part1=part+":"+a0+"毫克n"part2=part+":"+a1+"毫克n"constitute=part1+part2;3

14、. 構(gòu)造者按照工廠方法模式,我們編寫了擔(dān)當(dāng)構(gòu)造者角色的接口:Drug類代DrugCreator,代碼如下:DrugCreator.javapulicinterfaceDrugCreatorpublicabstractDruggetDrug();工廠方法4. 具體構(gòu)造者按照工廠方法模式,ParaDrugCreator類和AmorDrugCreator類是兩個(gè)具體構(gòu)造者角色,代碼如下:ParaDrugCreator.javapublicclassParaDrugCreatorimplementsDrugCreatorpublicDruggetDrug()inta=250,15,1,10;Drugd

15、rug=newParacetamol(氨加黃敏膠囊",a);returndrug;AmorDrugCreator.javapublicclassAmorDrugCreatorimplementsDrugCreatorpublicDruggetDrug()inta=250,5;Drugdrug=newAmorolfine(”甲硝唑膠囊",a);returndrug;5. 應(yīng)用程序應(yīng)用程序Appletcation.java使用了上述工廠模式中所涉及的抽象產(chǎn)品、構(gòu)建者以及具體構(gòu)造者,即使用具體構(gòu)造者為用戶提供藥品。Appletcation.javaimportjava.util.

16、*;publicclassAppletcationpublicstaticvoidmain(Stringargs)DrugCreaorcreator=newParaDrugCreator();Drugdrug=creator.getDrug();System.out.println(drug.getName()+的成分:");System.out.println(drug.getConstitute();creator=newAmorDrugCreator();drug=creator.getDrug();System.out.println(drug.getName()+的成分:");System.out.println(drug.getConstitute();運(yùn)行結(jié)果:氨加黃敏膠囊的成分:每粒含乙酰氨基酚:250毫克每粒含咖啡因:15毫克每粒含人工牛黃:1毫克每粒含馬來酸氯苯:10毫克甲硝唑膠囊的成分:每粒含甲硝唑:200毫克每粒含人工牛黃:5毫克第四章設(shè)計(jì)模式學(xué)習(xí)總結(jié)目前,面向?qū)ο蟪绦蛟O(shè)計(jì)已經(jīng)成為軟件設(shè)計(jì)開發(fā)領(lǐng)域的主流,而學(xué)習(xí)使用設(shè)計(jì)模式無疑非常有助于軟件開發(fā)人員使用面向?qū)ο笳Z言開發(fā)出易維護(hù)、易擴(kuò)展、易復(fù)用的代碼,其原因是設(shè)計(jì)

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論