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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

2、ttern name) 問題(problem) 解決方案(solution) 效果(consequences),設計模式 基本要素,模式名稱(pattern name) 一個助記名,它用一兩個詞來描述模式的問題、解決方案和效果。命名一個新的模式增加了我們的設計詞匯。設計模式允許我們在較高的抽象層次上進行設計。基于一個模式詞匯表,我們自己以及同事之間就可以討論模式并在編寫文檔時使用它們。模式名可以幫助我們思考,便于我們與其他人交流設計思想及設計結果。找到恰當的模式名也是我們設計模式編目工作的難點之一。,設計模式 基本要素,設計模式 基本要素,問題(problem) 描述了應該在何時使用模式。它解

3、釋了設計問題和問題存在的前因后果,它可能描述了特定的設計問題,如怎樣用對象表示算法等。也可能描述了導致不靈活設計的類或對象結構。有時候,問題部分會包括使用模式必須滿足的一系列先決條件。,設計模式 基本要素,解決方案(solution) 描述了設計的組成成分,它們之間的相互關系及各自的職責和協(xié)作方式。因為模式就像一個模板,可應用于多種不同場合,所以解決方案并不描述一個特定而具體的設計或實現,而是提供設計問題的抽象描述和怎樣用一個具有一般意義的元素組合(類或對象組合)來解決這個問題。,設計模式 基本要素,效果(consequences) 描述了模式應用的效果及使用模式應權衡的問題。盡管我們描述設計

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

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

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

7、n模式,設計模式 實例:Singleton模式,適用性 在下列情況下可使用Singleton模式: 當類只能有一個實例且客戶可以從一個公共方法訪問它時。 當這個唯一實例應該是可通過子類繼承來擴展的,并且客戶應該無需更改代碼就能使用一個子類的實例時。,結構,設計模式 實例:Singleton模式,設計模式 實例: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)點: 對唯一實例的受控訪問:因為Singleton類封裝它的唯一實例,所以它可以嚴格地控制客戶怎樣以及何時訪問它。 允許對操作和表示的精化: Singleton類可以有子類,而且用這個擴展類的實例來配置一個應用是很容易的。你可以用你所需要的類的實例在運行時刻配置應用。 比靜態(tài)方法(類操作)更靈活:另一種封裝單件功能的方式是使用靜態(tài)方法。但是,使用靜態(tài)方法需要考慮同步問題,也容易導致內存數據不一致的問題。,設計模式 實例:Singleton模式,MVC概述 WEB應

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

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

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

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

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

溫馨提示

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

評論

0/150

提交評論