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

下載本文檔

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

文檔簡介

TOC\o"1-3"\h\u12916第一章設(shè)計模式的簡介 2292661.1什么是設(shè)計模式 2125241.2設(shè)計模式的基本要素 2197591.3學習設(shè)計模式的重要性 2143701.4面向?qū)ο蟮奶卣?382611.4.1封裝 3297851.4.2繼承 3318271.4.3多態(tài) 36840第二章面向?qū)ο蟮膸讉€基本原則 450542.1面向抽象原則 416632.2“開-閉”原則 4177762.3“多用組合,少用繼承”原則 4289152.4“高內(nèi)聚-弱耦合”原則 527540第三章設(shè)計模式分類 586153.1行為型模式 5300103.2結(jié)構(gòu)型模式 587143.3創(chuàng)建型模式 6189943.4工廠模式情景舉例 657283.4.1設(shè)計要求 6129533.4.2設(shè)計實現(xiàn) 712178第四章設(shè)計模式學習總結(jié) 102028致謝 101149參考文獻 11第一章設(shè)計模式的簡介1.1什么是設(shè)計模式設(shè)計模式(Designpattern)是一套被反復(fù)使用、多數(shù)人知曉的、經(jīng)過分類編目的、代碼設(shè)計經(jīng)驗的總結(jié)。使用設(shè)計模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。設(shè)計面向?qū)ο筌浖容^困難,而設(shè)計可復(fù)用的面向?qū)ο筌浖透永щy,你必須先找出有關(guān)的對象,以適當?shù)牧6葘⑺麄儦w類,在定義的接口和繼承類,建立對象之間的相互關(guān)系。你的設(shè)計應(yīng)該對手頭的問題有針對性,同時對將來的問題有足夠的通用性。設(shè)計出盡可能少的重復(fù)設(shè)計模式。有經(jīng)驗的面向?qū)ο笤O(shè)計者能做出良好的設(shè)計,二新手則面對眾多選擇無從下手。設(shè)計模式使人們可以更加簡單方便地復(fù)用成功的設(shè)計和體系結(jié)構(gòu)。1.2設(shè)計模式的基本要素記錄一個設(shè)計模式需要4個基本要素:(1)名稱:一個模式的名稱高度包括該模式的本質(zhì),有利于該行業(yè)統(tǒng)一術(shù)語、便于交流使用。(2)問題:描述應(yīng)該在何時使用模式,解釋設(shè)計問題和問題存在的前因后果,描述在怎樣的環(huán)境下使用該模式。(3)方案:描述設(shè)計的組成部分、他們之間的相互關(guān)系及各自的職責和協(xié)作方式。(4)效果:描述模式的應(yīng)用效果及使用模式應(yīng)該權(quán)衡的問題。主要效果包括使用模式對系統(tǒng)的靈活性、擴充性和復(fù)用性的影響。1.3學習設(shè)計模式的重要性一個好的設(shè)計系統(tǒng)往往是易維護、易擴展、易復(fù)用的,學習好設(shè)計模式對提高設(shè)計能力無疑是非常有幫助的。設(shè)計模式的目的不是針對軟件設(shè)計和開發(fā)中的每個問題都給出解決方案,而是針對某種特定環(huán)境中通常都會遇到的某種軟件開發(fā)問題給出可用的一些解決方案,因此學習設(shè)計模式不僅可以使我們使用好這些成功的模式,更重要的是可以是我們更加深刻地理解面向?qū)ο蟮脑O(shè)計思想,非常有利于我們更好的使用面向?qū)ο笳Z言解決設(shè)計中的問題。1.4面向?qū)ο蟮奶卣麟S著計算機硬件設(shè)備功能的進一步提高,使得基于對象的編程成為可能(面向?qū)ο笳Z言編寫的程序需要消耗更多的內(nèi)存,需要更快的CPU保證其運行速度)?;趯ο蟮木幊谈臃先说乃季S模式,使用面向?qū)ο笳Z言可以編寫易維護、易擴展和易復(fù)用的程序代碼,更重要的是,面向?qū)ο缶幊坦膭顒?chuàng)造性的程序設(shè)計。1.4.1封裝面向?qū)ο缶幊痰暮诵乃枷胫痪褪菍?shù)據(jù)核對數(shù)據(jù)的操作封裝在一起。通過抽象,即從具體的實例中抽取共同的性質(zhì)形成一般的概念比如,類的概念。1.4.2繼承繼承是一種由已有的類定義出新類的機制。利用繼承,可以先定義一個共有屬性的一般類,根據(jù)該一般類再定義具有特殊屬性的子類,子類繼承一般類的屬性和行為,并根據(jù)需要增加他自己的心得屬性和行為。由繼承而得到的類稱為子類,被繼承的類稱為父類(超類)。Java不支持多重繼承,即子類只能有一個父類(與C++不同)。1.4.3多態(tài)多態(tài)是面向?qū)ο缶幊痰挠忠环N重要特征。有兩種意義的多態(tài)。一種是操作名稱的多態(tài),即有多個操作具有相同的名字,但這些操作所接受的消息類型必須不同。所謂操作名稱的多態(tài)性,是指可以向操作傳遞不同的消息,以便讓對象根據(jù)響應(yīng)的消息來產(chǎn)生相應(yīng)的行為。另一種是和繼承有關(guān)的多態(tài),是指同一個操作被不同類型對象調(diào)用時可能產(chǎn)生不同的行為。第二章面向?qū)ο蟮膸讉€基本原則2.1面向抽象原則所謂面向?qū)ο缶幊?,是指當設(shè)計一個類時,不讓該類面向具體的類,而是面向抽象類或接口,即所設(shè)計類中的重要數(shù)據(jù)是抽象類或接口聲明的變量,而不是具體類聲明的變量。2.2“開-閉”原則所謂“開-閉”原則,就是讓我們的設(shè)計對擴展開放,對修改關(guān)閉。實際上這句話的本質(zhì)是指當一個設(shè)計中增加新的模塊時,不需要修改現(xiàn)有的模塊。在給出一個設(shè)計時,應(yīng)當首先考慮到用戶需求的變化,將應(yīng)對用戶變化的部分設(shè)計為對擴展開放,而設(shè)計的核心部分是經(jīng)過精心考慮之后確定下來的基本結(jié)構(gòu),這部分應(yīng)當是對修改關(guān)閉的,即不能因為用戶的需求變化而再發(fā)生變化,因為這部分不是用來應(yīng)對需求變化的。如果一個設(shè)計遵守了“開-閉”原則,那么一定是易維護的,因為在設(shè)計中增加新的模塊時,不必去修改設(shè)計中的核心模塊。2.3“多用組合,少用繼承”原則在許多設(shè)計中,人們希望系統(tǒng)的類之間盡量使耦合關(guān)系,而不希望是強耦合關(guān)系。設(shè)計的底層結(jié)構(gòu)中通常會出現(xiàn)較多的繼承結(jié)構(gòu),而許多應(yīng)用層需要避開繼承的缺點,而需要組合的優(yōu)點。要合理的使用組合,而不是使用繼承來獲得方法的復(fù)用,需要經(jīng)過一定時間的認真思考、學習和編程實踐。2.4“高內(nèi)聚-弱耦合”原則如果類中的方法是一組相關(guān)的行為,則稱該類是高內(nèi)聚的,反之稱為低內(nèi)聚。高內(nèi)聚便于類的維護,而低內(nèi)聚不利于類的維護。弱耦合就是盡量不要讓一個類含有太多的其他類的實力的引用,以避免修改系統(tǒng)的其中一部分會影響到其他部分。第三章設(shè)計模式分類3.1行為型模式行為型模式涉及怎樣合理的設(shè)計對象之間的交互通信,以及怎樣合理地為對象分配職責,讓設(shè)計富有彈性、易維護、易復(fù)用。策略模式狀態(tài)模式命令模式中介者模式責任鏈模式模板方法模式觀察者模式訪問者模式3.2結(jié)構(gòu)型模式結(jié)構(gòu)型模式涉及如何組合類和對象以形成更大的結(jié)構(gòu),和類有關(guān)的結(jié)構(gòu)型模式設(shè)計如何合理點的使用繼承機制,和對象有關(guān)的結(jié)構(gòu)型模式涉及如何合理的使用對象機制。裝飾模式組合模式適配器模式外觀模式代理模式享元模式橋接模式3.3創(chuàng)建型模式創(chuàng)建型模式涉及對象的實例化,這類模式的特點是:不讓用戶代碼依賴于對象的創(chuàng)建或排列方式,避免用戶直接使用new運算符創(chuàng)建對象。工廠方法模式抽象工廠模式生成器模式原型模式單間模式3.4工廠模式情景舉例適合使用工廠方法模式的情景:用戶需要一個類的子類的實例,但不希望該類的子類形成耦合。用戶需要一個類的子類的實例,但用戶不知道該類有哪些子類可用。3.4.1設(shè)計要求系統(tǒng)目前已經(jīng)按照有關(guān)藥品的規(guī)定設(shè)計一個抽象類Drug,該抽象類特別規(guī)定了所創(chuàng)建的藥品必須給出藥品的成分及含量。Drug目前有兩個子類:Paracetamol和Amorolfine。Paracetamol子類負責創(chuàng)建氨咖黃敏一類的藥品;Amorolfine子類負責創(chuàng)建鹽酸阿莫羅芬一類的藥品。一個為某藥品開發(fā)的應(yīng)用程序需要使用Drug類的某個子類的實例為用戶提供藥品,但是藥店的應(yīng)用程序不能使用Drug的子類的構(gòu)造方法直接創(chuàng)建對象,因為藥店沒有能力給出藥品的各個成分的含量,只有藥廠才有這樣的能力。請使用工廠方法模式偉已有系統(tǒng)編寫一個抽象類,并在其中定義工廠方法,該工廠方法返回Drug類的子類的實例。3.4.2設(shè)計實現(xiàn)1.抽象產(chǎn)品按照工廠方法模式,Drug類是工廠方法模式中的抽象產(chǎn)品角色,Drug類代碼:Drug.javapublicabstractclassDrug{Stringconstitute;Stringname;publicStringgetName(){returnname;}publicStringgetConstitute(){returnconstitute;}}2.具體產(chǎn)品按照工廠方法模式,Paracetamol類和Amorolfine類是產(chǎn)品角色,Drug類代碼:Paracetamol.javapublicclassParacetamolextendsDrug{Stringpart1="每粒含乙酰氨基酚";Stringpart2="每粒含咖啡因";Stringpart3="每粒含人工牛黃";Stringpart4="每粒含馬來酸氯苯";publicParacetamol(Stringname,int[]a){=name;part1=part+":"+a[0]+"毫克\n";part2=part+":"+a[1]+"毫克\n";part3=part+":"+a[2]+"毫克\n";part4=part+":"+a[3]+"毫克\n";constitute=part1+part2+part3+part4;}}Amorolfine.javapublicclassAmorolfineextendsDrug{Stringpart1="每粒含甲硝唑";Stringpart2="每粒含人工牛黃";publicAmorolfine(Stringname,int[]a){=name;part1=part+":"+a[0]+"毫克\n";part2=part+":"+a[1]+"毫克\n";constitute=part1+part2;}}構(gòu)造者按照工廠方法模式,我們編寫了擔當構(gòu)造者角色的接口:DrugCreator,代碼如下:DrugCreator.javapulicinterfaceDrugCreator{publicabstractDruggetDrug();//工廠方法}具體構(gòu)造者按照工廠方法模式,ParaDrugCreator類和AmorDrugCreator類是兩個具體構(gòu)造者角色,代碼如下:ParaDrugCreator.javapublicclassParaDrugCreatorimplementsDrugCreator{publicDruggetDrug(){int[]a={250,15,1,10};Drugdrug=newParacetamol("氨加黃敏膠囊",a);returndrug;}}AmorDrugCreator.javapublicclassAmorDrugCreatorimplementsDrugCreator{publicDruggetDrug(){int[]a={250,5};Drugdrug=newAmorolfine("甲硝唑膠囊",a);returndrug;}}應(yīng)用程序應(yīng)用程序Appletcation.java使用了上述工廠模式中所涉及的抽象產(chǎn)品、構(gòu)建者以及具體構(gòu)造者,即使用具體構(gòu)造者為用戶提供藥品。Appletcation.javaimportjava.util.*;publicclassAppletcation{publicstaticvoidmain(Stringargs[]){DrugCreaorcreator=newParaDrugCreator();Drugdrug=creator.getDrug();System.out.println(drug.getName()+"的成分:");System.out.print

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論