ch19DesignPattern.ppt_第1頁(yè)
ch19DesignPattern.ppt_第2頁(yè)
ch19DesignPattern.ppt_第3頁(yè)
ch19DesignPattern.ppt_第4頁(yè)
ch19DesignPattern.ppt_第5頁(yè)
已閱讀5頁(yè),還剩30頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、基本概念 基本要素 模式分類 實(shí)例,第十九講 設(shè)計(jì)模式(Design Patterns),在面向?qū)ο蟮木幊讨?,軟件編程人員更加注重現(xiàn)有代碼的重用性和可維護(hù)性。 設(shè)計(jì)模式使人們可以更加簡(jiǎn)單方便地重用成功的設(shè)計(jì)和體系結(jié)構(gòu)。將已證實(shí)的技術(shù)表述成設(shè)計(jì)模式也會(huì)使新系統(tǒng)開發(fā)者更加容易理解其設(shè)計(jì)思路。 A pattern is an idea that has been useful in one practical context and will probably be useful in others. -Martin Fowler,設(shè)計(jì)模式 基本概念,一般而言,一個(gè)模式有四個(gè)基本要素 模式名稱(pa

2、ttern name) 問題(problem) 解決方案(solution) 效果(consequences),設(shè)計(jì)模式 基本要素,模式名稱(pattern name) 一個(gè)助記名,它用一兩個(gè)詞來描述模式的問題、解決方案和效果。命名一個(gè)新的模式增加了我們的設(shè)計(jì)詞匯。設(shè)計(jì)模式允許我們?cè)谳^高的抽象層次上進(jìn)行設(shè)計(jì)?;谝粋€(gè)模式詞匯表,我們自己以及同事之間就可以討論模式并在編寫文檔時(shí)使用它們。模式名可以幫助我們思考,便于我們與其他人交流設(shè)計(jì)思想及設(shè)計(jì)結(jié)果。找到恰當(dāng)?shù)哪J矫彩俏覀冊(cè)O(shè)計(jì)模式編目工作的難點(diǎn)之一。,設(shè)計(jì)模式 基本要素,設(shè)計(jì)模式 基本要素,問題(problem) 描述了應(yīng)該在何時(shí)使用模式。它解

3、釋了設(shè)計(jì)問題和問題存在的前因后果,它可能描述了特定的設(shè)計(jì)問題,如怎樣用對(duì)象表示算法等。也可能描述了導(dǎo)致不靈活設(shè)計(jì)的類或?qū)ο蠼Y(jié)構(gòu)。有時(shí)候,問題部分會(huì)包括使用模式必須滿足的一系列先決條件。,設(shè)計(jì)模式 基本要素,解決方案(solution) 描述了設(shè)計(jì)的組成成分,它們之間的相互關(guān)系及各自的職責(zé)和協(xié)作方式。因?yàn)槟J骄拖褚粋€(gè)模板,可應(yīng)用于多種不同場(chǎng)合,所以解決方案并不描述一個(gè)特定而具體的設(shè)計(jì)或?qū)崿F(xiàn),而是提供設(shè)計(jì)問題的抽象描述和怎樣用一個(gè)具有一般意義的元素組合(類或?qū)ο蠼M合)來解決這個(gè)問題。,設(shè)計(jì)模式 基本要素,效果(consequences) 描述了模式應(yīng)用的效果及使用模式應(yīng)權(quán)衡的問題。盡管我們描述設(shè)計(jì)

4、決策時(shí),并不總提到模式效果,但它們對(duì)于評(píng)價(jià)設(shè)計(jì)選擇和理解使用模式的代價(jià)及好處具有重要意義。軟件效果大多關(guān)注對(duì)時(shí)間和空間的衡量,它們也表述了語(yǔ)言和實(shí)現(xiàn)問題。因?yàn)閺?fù)用是面向?qū)ο笤O(shè)計(jì)的要素之一,所以模式效果包括它對(duì)系統(tǒng)的靈活性、擴(kuò)充性或可移植性的影響,顯式地列出這些效果對(duì)理解和評(píng)價(jià)這些模式很有幫助。,設(shè)計(jì)模式 模式分類,創(chuàng)建型模式 抽象的實(shí)例化過程 結(jié)構(gòu)型模式 如何組合類和對(duì)象以獲得更大的結(jié)構(gòu) 行為型模式 涉及到算法和對(duì)象間職責(zé)的分配,設(shè)計(jì)模式 模式分類,創(chuàng)建型模式 Abstract Factory:抽象工廠 Builder:生成器 Factory Method:工廠方法 ProtoType:原型

5、Singleton:?jiǎn)螌?shí)例,設(shè)計(jì)模式 模式分類,結(jié)構(gòu)型模式 MVC :模型-視圖-控制器 Adapter:適配器 Bridge:橋接 Composite:組成 Decorator:裝飾 Facade:外觀 Flyweight:享元 Proxy:代理,設(shè)計(jì)模式 模式分類,行為型模式 Chain of Responsibility:責(zé)任鏈 Command:命令 Interpreter:解釋器 Iterator:迭代器 Mediator:中介者 Memento:備忘錄 Observer:觀察者 State:狀態(tài) Strategy:策略 Template Method:模板方法 Visotor:訪問者

6、,設(shè)計(jì)模式 實(shí)例:Singleton模式,意圖 考慮數(shù)據(jù)共享和封裝,保證一個(gè)類僅有一個(gè)實(shí)例,并在提供各種公共操作的基礎(chǔ)上提供一個(gè)該實(shí)例的全局訪問方法。 動(dòng)機(jī) 對(duì)于某些系統(tǒng),有些類里封裝了一些公共的、共享的信息,比如日志文件記錄器,數(shù)據(jù)緩沖區(qū)等,如果允許這些類有多個(gè)實(shí)例,那么,很容易造成這些信息的完整性被破壞,或者,由于同步操作,會(huì)造成系統(tǒng)的性能降低。因此,對(duì)這些類,只允許一個(gè)實(shí)例存在。,要想保證一個(gè)類只有一個(gè)實(shí)例,需要做到: 必須能夠?qū)嵗@個(gè)類 必須阻止其它的類來隨意實(shí)例化這個(gè)類 有了這個(gè)實(shí)例以后,需要提供一個(gè)該實(shí)例的全局訪問方法,這和該實(shí)例的保存位置有關(guān)。,設(shè)計(jì)模式 實(shí)例:Singleto

7、n模式,設(shè)計(jì)模式 實(shí)例:Singleton模式,適用性 在下列情況下可使用Singleton模式: 當(dāng)類只能有一個(gè)實(shí)例且客戶可以從一個(gè)公共方法訪問它時(shí)。 當(dāng)這個(gè)唯一實(shí)例應(yīng)該是可通過子類繼承來擴(kuò)展的,并且客戶應(yīng)該無需更改代碼就能使用一個(gè)子類的實(shí)例時(shí)。,結(jié)構(gòu),設(shè)計(jì)模式 實(shí)例:Singleton模式,設(shè)計(jì)模式 實(shí)例:Singleton模式,示例一: public class Runtime private static Runtime currentRuntime = new Runtime(); private Runtime()/. public static Runtime getRuntim

8、e() return currentRuntime; . ,示例二: SingletonTest.java,Singleton模式優(yōu)點(diǎn): 對(duì)唯一實(shí)例的受控訪問:因?yàn)镾ingleton類封裝它的唯一實(shí)例,所以它可以嚴(yán)格地控制客戶怎樣以及何時(shí)訪問它。 允許對(duì)操作和表示的精化: Singleton類可以有子類,而且用這個(gè)擴(kuò)展類的實(shí)例來配置一個(gè)應(yīng)用是很容易的。你可以用你所需要的類的實(shí)例在運(yùn)行時(shí)刻配置應(yīng)用。 比靜態(tài)方法(類操作)更靈活:另一種封裝單件功能的方式是使用靜態(tài)方法。但是,使用靜態(tài)方法需要考慮同步問題,也容易導(dǎo)致內(nèi)存數(shù)據(jù)不一致的問題。,設(shè)計(jì)模式 實(shí)例:Singleton模式,MVC概述 WEB應(yīng)

9、用的兩種開發(fā)模式 MVC操作順序 MVC優(yōu)點(diǎn) MVC的適用性,設(shè)計(jì)模式 實(shí)例:MVC模式,MVC概述,設(shè)計(jì)模式 實(shí)例:MVC模式,MVC模式最初使用SmallTalk開發(fā),后來在Swing組件庫(kù)中廣泛應(yīng)用。 該模式采用一個(gè)圖形化對(duì)象并將其任務(wù)分解成三部分: 控制器:觸發(fā)一個(gè)對(duì)組件的改變。 模型:提供修改、訪問數(shù)據(jù)的方法。 視圖:提供當(dāng)前數(shù)據(jù)的直觀顯示。,MVC概述,設(shè)計(jì)模式 實(shí)例:MVC模式,設(shè)計(jì)模式 實(shí)例:MVC模式,JSP + JavaBean,Model1的主要特點(diǎn),表現(xiàn)層用HTML或JSP。 JSP文件還負(fù)責(zé)所有的業(yè)務(wù)和處理邏輯 JSP直接用代碼訪問數(shù)據(jù)或JSP通過JavaBean存取

10、數(shù)據(jù)。 以頁(yè)面為中心,應(yīng)用程序的業(yè)務(wù)邏輯和程序流程都在頁(yè)面中出現(xiàn)。 JSP要跳轉(zhuǎn)到別的頁(yè)面,通過超級(jí)鏈接或Form表單的action實(shí)現(xiàn)。,設(shè)計(jì)模式 實(shí)例:MVC模式,設(shè)計(jì)模式 實(shí)例:MVC模式,JSP不僅負(fù)責(zé)表示邏輯,還負(fù)責(zé)控制邏輯 大型項(xiàng)目中如果采取此方式,每個(gè)開發(fā)小組必須了解其它小組開發(fā)的所有頁(yè)面的詳細(xì)信息,否則對(duì)頁(yè)面的修改將會(huì)破壞應(yīng)用程序的流程。 當(dāng)輸出設(shè)備不同時(shí)(比如股票信息輸出到顯示器、手機(jī)、PDA上),需要采用不同的輸出格式(即不同的視圖),那么用此方式JSP不僅要判定設(shè)備的類型,而且要為不同類型的設(shè)備提供正確的顯示格式。,Model1的缺點(diǎn),設(shè)計(jì)模式 實(shí)例:MVC模式,JSP

11、+ JavaBean +Servlet,設(shè)計(jì)模式 實(shí)例:MVC模式,MVC模型,在一個(gè)典型的J2EE Web應(yīng)用中,MVC設(shè)計(jì)模式包括三個(gè)部分: 模型(Model): 用于封裝數(shù)據(jù),一般是關(guān)系數(shù)據(jù)庫(kù)或EJB。 視圖(View): 數(shù)據(jù)的表現(xiàn)組件,通常就是JSP頁(yè)面,也可以是GUI,可以有多個(gè)。 控制器(Controller): 接受用戶動(dòng)作,負(fù)責(zé)統(tǒng)一管理。一般是Servlet。,在一個(gè)典型的企業(yè)級(jí)應(yīng)用中,經(jīng)常需要用多種類型的接口來支持多種類型的用戶。 比如,一個(gè)網(wǎng)上商店可能需要: 為網(wǎng)上顧客提供HTML前端, 為無線用戶提供WML前端, 為系統(tǒng)管理員提供JFC/Swing GUI, 為供應(yīng)商提

12、供基于XML的Web service。,設(shè)計(jì)模式 實(shí)例:MVC模式,MVC模型,設(shè)計(jì)模式 實(shí)例:MVC模式,MVC模型,Model含有應(yīng)用程序的功能核心,表示應(yīng)用程序的狀態(tài),它不管View和Controller。 JavaBean就適合作為Model,可以用來設(shè)計(jì)應(yīng)用程序的大部分業(yè)務(wù)邏輯,能與數(shù)據(jù)庫(kù)或文件系統(tǒng)進(jìn)行交互,負(fù)責(zé)維護(hù)應(yīng)用程序的數(shù)據(jù)。,MVC模型:Model,設(shè)計(jì)模式 實(shí)例:MVC模式,MVC模型:View,設(shè)計(jì)模式 實(shí)例:MVC模式,View把應(yīng)用程序的數(shù)據(jù)通過界面展示給用戶。 View可以讀取Model的數(shù)據(jù),但不可修改。 當(dāng)用戶修改Model數(shù)據(jù)時(shí),會(huì)通知View,以便用戶看到最

13、新的數(shù)據(jù)信息。 JSP用于實(shí)現(xiàn)此目的,開發(fā)者不用知道也不必去關(guān)心數(shù)據(jù)庫(kù)發(fā)生了什么變化或者業(yè)務(wù)邏輯的詳細(xì)情況。 注意:JSP中應(yīng)盡可能少地使用Java代碼。,MVC模型:Controller,設(shè)計(jì)模式 實(shí)例:MVC模式,控制器的作用是處理請(qǐng)求、創(chuàng)建JavaBean或創(chuàng)建供JSP使用的對(duì)象。通常,控制器還決定把用戶請(qǐng)求轉(zhuǎn)交給哪一個(gè)界面組件(View)。 用于對(duì)用戶的輸入進(jìn)行響應(yīng)。 它創(chuàng)建Model并提供輸入。 Servlet可同時(shí)兼有Java和HTML代碼,可以接收來自客戶端的HTTP請(qǐng)求,根據(jù)此請(qǐng)求決定創(chuàng)建哪些必要的JavaBean,并能把Model的數(shù)據(jù)修改通知View。,在控制器被用戶觸發(fā)時(shí),它將把變化傳達(dá)給模型; 模型改變?cè)摂?shù)據(jù)并將新數(shù)據(jù)推給適當(dāng)?shù)囊晥D 視圖接收新數(shù)據(jù)并以新的圖像或表格形式顯示數(shù)據(jù)。,MVC操作順序,設(shè)計(jì)模式 實(shí)例:MVC模式,將核心數(shù)據(jù)的存取、數(shù)據(jù)表示和控制邏輯三者分離開來,可針對(duì)多種用戶設(shè)計(jì)多個(gè)視圖,以便共享同樣的企業(yè)數(shù)據(jù)模型。 Web設(shè)計(jì)人員可以集中于使用JSP來開發(fā)UI表示數(shù)據(jù),而代碼開發(fā)人員可以使用Servlet編寫執(zhí)行任務(wù)的代碼,這樣有利于縮短開發(fā)周期。,MVC的優(yōu)點(diǎn),設(shè)計(jì)模式 實(shí)例:MVC模式,Web頁(yè)面需要根據(jù)用戶在運(yùn)行時(shí)提

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論