




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第14章外觀模式本章教學內容w 外觀模式 模式動機與定義模式動機與定義 模式結構與分析模式結構與分析 模式實例與解析模式實例與解析 模式效果與應用模式效果與應用 模式擴展模式擴展外觀模式w模式動機公司新聞留言系統產品介紹在線論壇網站首頁外觀模式w模式動機 引入外觀角色之后,引入外觀角色之后,用戶只需要直接與外觀角色交互,用戶與子系用戶只需要直接與外觀角色交互,用戶與子系統之間的復雜關系由外觀角色來實現統之間的復雜關系由外觀角色來實現,從而降低了系統的耦合度。,從而降低了系統的耦合度。外觀模式w 模式定義外觀模式外觀模式(Facade Pattern):外部與一個子系統的通:外部與一個子系統的通
2、信必須通過一個信必須通過一個統一的外觀對象統一的外觀對象進行,為子系統中的一進行,為子系統中的一組接口組接口提供一個一致的界面提供一個一致的界面,外觀模式定義了一個高層,外觀模式定義了一個高層接口,這個接口接口,這個接口使得這一子系統更加容易使用使得這一子系統更加容易使用。外觀模。外觀模式又稱為式又稱為門面模式門面模式,它是一種,它是一種對象結構型模式對象結構型模式。外觀模式w 模式定義Facade Pattern: Provide a unified interface to a set of interfaces in a subsystem. Facade defines a highe
3、r-level interface that makes the subsystem easier to use. Frequency of use: high外觀模式w 模式結構ClientFacadeSubSystemASubSystemBSubSystemC外觀模式w 模式結構外觀模式包含如下角色:外觀模式包含如下角色: Facade: 外觀角色 SubSystem:子系統角色外觀模式w 模式分析 根據根據“單一職責原則單一職責原則”,在軟件中將一個系統劃分為若干個子系在軟件中將一個系統劃分為若干個子系統有利于降低整個系統的復雜性統有利于降低整個系統的復雜性,一個常見的設計目標是使子系,
4、一個常見的設計目標是使子系統間的通信和相互依賴關系達到最小,而達到該目標的途徑之一統間的通信和相互依賴關系達到最小,而達到該目標的途徑之一就是就是引入一個外觀對象引入一個外觀對象,它,它為子系統的訪問提供了一個簡單而單為子系統的訪問提供了一個簡單而單一的入口一的入口。 外觀模式也是外觀模式也是“迪米特法則迪米特法則”的體現,的體現,通過引入一個新的外觀類通過引入一個新的外觀類可以降低原有系統的復雜度可以降低原有系統的復雜度,同時,同時降低客戶類與子系統類的耦合降低客戶類與子系統類的耦合度度。外觀模式w 模式分析 外觀模式要求一個子系統的外部與其內部的通信外觀模式要求一個子系統的外部與其內部的通
5、信通過一個統一的通過一個統一的外觀對象進行外觀對象進行,外觀類將客戶端與子系統的內部復雜性分隔開,外觀類將客戶端與子系統的內部復雜性分隔開,使得使得客戶端只需要與外觀對象打交道,而不需要與子系統內部的客戶端只需要與外觀對象打交道,而不需要與子系統內部的很多對象打交道很多對象打交道。 外觀模式的目的在于外觀模式的目的在于降低系統的復雜程度降低系統的復雜程度。 外觀模式從很大程度上外觀模式從很大程度上提高了客戶端使用的便捷性提高了客戶端使用的便捷性,使得客戶端,使得客戶端無須關心子系統的工作細節,通過外觀角色即可調用相關功能。無須關心子系統的工作細節,通過外觀角色即可調用相關功能。 外觀模式w 模
6、式分析 典型的外觀角色代碼:典型的外觀角色代碼:public class Facade private SubSystemA obj1 = new SubSystemA(); private SubSystemB obj2 = new SubSystemB(); private SubSystemC obj3 = new SubSystemC(); public void method() obj1.method(); obj2.method(); obj3.method(); 外觀模式w 外觀模式實例與解析實例一:電源總開關實例一:電源總開關 現在考察一個電源總開關的例子,以便進一步說明外觀
7、模式。為了使用方便,一個電源總開關可以控制四盞燈、一個風扇、一臺空調和一臺電視機的啟動和關閉。通過該電源總開關可以同時控制上述所有電器設備,使用外觀模式設計該系統。外觀模式w 外觀模式實例與解析實例一:電源總開關實例一:電源總開關lightsfanactvGeneralSwitchFacade-lightsfanactv: Light: Fan: AirConditioner: Television = new Light4+GeneralSwitchFacade ()on ()off ().: void: voidLight- position : String+Light (String
8、position)on ()off ().: void: voidFan+on ()off ().: void: voidAirConditioner+on ()off ().: void: voidClientTelevision+on ()off ().: void: void外觀模式w 外觀模式實例與解析實例一:電源總開關實例一:電源總開關 參考代碼 (Chapter 14 Facadesample01)演示演示外觀模式w 外觀模式實例與解析實例二:文件加密實例二:文件加密 某系統需要提供一個文件加密模塊,加密流程包括三個操作,分別是讀取源文件、加密、保存加密之后的文件。讀取文件和保存文
9、件使用流來實現,這三個操作相對獨立,其業務代碼封裝在三個不同的類中。現在需要提供一個統一的加密外觀類,用戶可以直接使用該加密外觀類完成文件的讀取、加密和保存三個操作,而不需要與每一個類進行交互,使用外觀模式設計該加密模塊。外觀模式w 外觀模式實例與解析實例二:文件加密實例二:文件加密readercipherwriterEncryptFacade-readercipherwriter: FileReader: CipherMachine: FileWriter+EncryptFacade ()fileEncrypt (String fileNameSrc, String fileNameDes)
10、.: voidFileReader+ read (String fileNameSrc).: StringCipherMachine+ encrypt (String plainText).: StringFileWriter+ write (String encryptText, String fileNameDes).: voidreader = new FileReader();cipher = new CipherMachine();writer = new FileWriter();String plainStr=reader.read(fileNameSrc);String enc
11、ryptStr=cipher.encrypt(plainStr);writer.write(encryptStr,fileNameDes);外觀模式w 模式優缺點外觀模式的優點外觀模式的優點 對客戶屏蔽子系統組件,減少了客戶處理的對象數目并使得子系統使用起來更加容易。通過引入外觀模式,客戶代碼將變得很簡單,與之關聯的對象也很少。 實現了子系統與客戶之間的松耦合關系,這使得子系統的組件變化不會影響到調用它的客戶類,只需要調整外觀類即可。 降低了大型軟件系統中的編譯依賴性,并簡化了系統在不同平臺之間的移植過程,因為編譯一個子系統一般不需要編譯所有其他的子系統。一個子系統的修改對其他子系統沒有任何影
12、響,而且子系統內部變化也不會影響到外觀對象。 只是提供了一個訪問子系統的統一入口,并不影響用戶直接使用子系統類。外觀模式w 模式優缺點外觀模式的缺點外觀模式的缺點 不能很好地限制客戶使用子系統類,如果對客戶訪問子系統類做太多的限制則減少了可變性和靈活性。 在不引入抽象外觀類的情況下,增加新的子系統可能需要修改外觀類或客戶端的源代碼,違背了“開閉原則”。外觀模式w 模式適用環境在以下情況下可以使用外觀模式:在以下情況下可以使用外觀模式: 當要為一個復雜子系統提供一個簡單接口時可以使用外觀模式。該接口可以滿足大多數用戶的需求,而且用戶也可以越過外觀類直接訪問子系統。 客戶程序與多個子系統之間存在很
13、大的依賴性。引入外觀類將子系統與客戶以及其他子系統解耦,可以提高子系統的獨立性和可移植性。 在層次化結構中,可以使用外觀模式定義系統中每一層的入口,層與層之間不直接產生聯系,而通過外觀類建立聯系,降低層之間的耦合度。外觀模式w 模式應用 (1) 外觀模式應用于外觀模式應用于JDBC數據庫操作數據庫操作 public class JDBCFacade private Connection conn=null; private Statement statement=null; public void open(String driver,String jdbcUrl,String userNam
14、e,String userPwd) . public int executeUpdate(String sql) . public ResultSet executeQuery(String sql) . public void close() . 外觀模式w 模式應用 (2) Session外觀模式外觀模式是外觀模式在是外觀模式在Java EE框架中的應用。框架中的應用。 ClientObjectSessionFacade-object1objectN: BusinessObject1: BusinessObjectN+businessMethod1 ()businessMethod2 ()
15、.: void: voidBusinessObject1+businessMethodA1 ()businessMethodA2 ().: void: voidBusinessObjectN+businessMethodN1 ()businessMethodN2 ().: void: void外觀模式w 模式擴展一個系統有多個外觀類一個系統有多個外觀類 在外觀模式中,通常只需要一個外觀類,并且此外觀類只有一個實例,換言之它是一個單例類。在很多情況下為了節約系統資源,一般將外觀類設計為單例類。當然這并不意味著在整個系統里只能有一個外觀類,在一個系統中可以設計多個外觀類,每個外觀類都負責和一些特定
16、的子系統交互,向用戶提供相應的業務功能。外觀模式w 模式擴展不要試圖通過外觀類為子系統增加新行為不要試圖通過外觀類為子系統增加新行為 不要通過繼承一個外觀類在子系統中加入新的行為,這種做法是錯誤的。外觀模式的用意是為子系統提供一個集中化和簡化的溝通渠道,而不是向子系統加入新的行為,新的行為的增加應該通過修改原有子系統類或增加新的子系統類來實現,不能通過外觀類來實現。外觀模式w 模式擴展外觀模式與迪米特法則外觀模式與迪米特法則 外觀模式創造出一個外觀對象,將客戶端所涉及的屬于一個子系統的協作伙伴的數量減到最少,使得客戶端與子系統內部的對象的相互作用被外觀對象所取代。外觀類充當了客戶類與子系統類之
17、間的“第三者”,降低了客戶類與子系統類之間的耦合度,外觀模式就是實現代碼重構以便達到“迪米特法則”要求的一個強有力的武器。外觀模式w 模式擴展抽象外觀類的引入抽象外觀類的引入 外觀模式最大的缺點在于違背了“開閉原則”,當增加新的子系統或者移除子系統時需要修改外觀類,可以通過引入抽象外觀類在一定程度上解決該問題,客戶端針對抽象外觀類進行編程。對于新的業務需求,不修改原有外觀類,而對應增加一個新的具體外觀類,由新的具體外觀類來關聯新的子系統對象,同時通過修改配置文件來達到不修改源代碼并更換外觀類的目的。 外觀模式w 模式擴展抽象外觀類的引入抽象外觀類的引入 ConcreteFacade1+meth
18、od1 ()method2 ().: void: voidSubSystem1SubSystem2SubSystem3AbstractFacade+method1 ()method2 ().: void: voidSubSystem4SubSystem5ConcreteFacade2+method1 ()method2 ().: void: voidClient本章小結w 在外觀模式中,外部與一個子系統的通信必須通過一個統一的外觀對象進行,為子系統中的一組接口提供一個一致的界面,外觀模式定義了一個高層接口,這個接口使得這一子系統更加容易使用。外觀模式又稱為門面模式,它是一種對象結構型模式。w 外觀模式包含兩個角色:外觀角色是在客戶端直接調用的角色,在外觀角色中可以知道相關的(一個或者多個)子系統的功能和責任,它將所有從客戶端發來的請求委派到相應的子系統去,傳遞給相應的子系統對象處理;在軟件系統中可以同時有一個或者多個子系統角色,每一個子系統可以不是一個單獨的類,而是一個類的集合,它實現子系統的功能。w 外觀模式要求一個子系統的外部與其內部的通信通過一個統一的外觀對象進行,外觀類將客戶端與子系統的內部復雜性分隔開,使得客戶端只需要與外
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中考數學試卷
- 茶葉連鎖加盟經營合作協議
- 倉庫物業租賃合同范本(含倉儲保險)
- 智能車庫產權及運營維護服務合同
- 跨國企業并購實務合同
- 朝陽區校園安全教育與安全文化建設合同
- 軍人配偶離婚財產分配協議范本
- 車輛抵押貸款貸后監管與資產處置合同
- 商用貨車定期保養及維修合同-標準范本
- 車輛轉讓與過戶手續全程代理及法律咨詢合同
- 建筑施工企業2025年半年業績總結和下半年工作計劃
- 昭通設備裝卸方案(3篇)
- 2025至2030中國港口航道工程行業深度研究及發展前景投資評估分析
- 單元復習AB卷:第二十八章 圓(A卷-中檔卷)解析版
- 網絡成癮干預機制-洞察及研究
- 建筑工程項目參與證明(8篇)
- 疏通經絡課件
- 2025-2030年中國3C數碼充電器行業市場深度調研及市場供需與投資價值研究報告
- 2026屆云南三校高考備考聯考卷(一)化學試卷+答案
- 2024中國農業銀行分行年度營銷宣傳方案
- 2025年高考全國一卷寫作范文10篇
評論
0/150
提交評論