第14章_外觀模式_第1頁
第14章_外觀模式_第2頁
第14章_外觀模式_第3頁
第14章_外觀模式_第4頁
第14章_外觀模式_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第14章外觀模式本章教學(xué)內(nèi)容w 外觀模式 模式動(dòng)機(jī)與定義模式動(dòng)機(jī)與定義 模式結(jié)構(gòu)與分析模式結(jié)構(gòu)與分析 模式實(shí)例與解析模式實(shí)例與解析 模式效果與應(yīng)用模式效果與應(yīng)用 模式擴(kuò)展模式擴(kuò)展外觀模式w模式動(dòng)機(jī)公司新聞留言系統(tǒng)產(chǎn)品介紹在線論壇網(wǎng)站首頁外觀模式w模式動(dòng)機(jī) 引入外觀角色之后,引入外觀角色之后,用戶只需要直接與外觀角色交互,用戶與子系用戶只需要直接與外觀角色交互,用戶與子系統(tǒng)之間的復(fù)雜關(guān)系由外觀角色來實(shí)現(xiàn)統(tǒng)之間的復(fù)雜關(guān)系由外觀角色來實(shí)現(xiàn),從而降低了系統(tǒng)的耦合度。,從而降低了系統(tǒng)的耦合度。外觀模式w 模式定義外觀模式外觀模式(Facade Pattern):外部與一個(gè)子系統(tǒng)的通:外部與一個(gè)子系統(tǒng)的通

2、信必須通過一個(gè)信必須通過一個(gè)統(tǒng)一的外觀對(duì)象統(tǒng)一的外觀對(duì)象進(jìn)行,為子系統(tǒng)中的一進(jìn)行,為子系統(tǒng)中的一組接口組接口提供一個(gè)一致的界面提供一個(gè)一致的界面,外觀模式定義了一個(gè)高層,外觀模式定義了一個(gè)高層接口,這個(gè)接口接口,這個(gè)接口使得這一子系統(tǒng)更加容易使用使得這一子系統(tǒng)更加容易使用。外觀模。外觀模式又稱為式又稱為門面模式門面模式,它是一種,它是一種對(duì)象結(jié)構(gòu)型模式對(duì)象結(jié)構(gòu)型模式。外觀模式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 模式結(jié)構(gòu)ClientFacadeSubSystemASubSystemBSubSystemC外觀模式w 模式結(jié)構(gòu)外觀模式包含如下角色:外觀模式包含如下角色: Facade: 外觀角色 SubSystem:子系統(tǒng)角色外觀模式w 模式分析 根據(jù)根據(jù)“單一職責(zé)原則單一職責(zé)原則”,在軟件中將一個(gè)系統(tǒng)劃分為若干個(gè)子系在軟件中將一個(gè)系統(tǒng)劃分為若干個(gè)子系統(tǒng)有利于降低整個(gè)系統(tǒng)的復(fù)雜性統(tǒng)有利于降低整個(gè)系統(tǒng)的復(fù)雜性,一個(gè)常見的設(shè)計(jì)目標(biāo)是使子系,

4、一個(gè)常見的設(shè)計(jì)目標(biāo)是使子系統(tǒng)間的通信和相互依賴關(guān)系達(dá)到最小,而達(dá)到該目標(biāo)的途徑之一統(tǒng)間的通信和相互依賴關(guān)系達(dá)到最小,而達(dá)到該目標(biāo)的途徑之一就是就是引入一個(gè)外觀對(duì)象引入一個(gè)外觀對(duì)象,它,它為子系統(tǒng)的訪問提供了一個(gè)簡單而單為子系統(tǒng)的訪問提供了一個(gè)簡單而單一的入口一的入口。 外觀模式也是外觀模式也是“迪米特法則迪米特法則”的體現(xiàn),的體現(xiàn),通過引入一個(gè)新的外觀類通過引入一個(gè)新的外觀類可以降低原有系統(tǒng)的復(fù)雜度可以降低原有系統(tǒng)的復(fù)雜度,同時(shí),同時(shí)降低客戶類與子系統(tǒng)類的耦合降低客戶類與子系統(tǒng)類的耦合度度。外觀模式w 模式分析 外觀模式要求一個(gè)子系統(tǒng)的外部與其內(nèi)部的通信外觀模式要求一個(gè)子系統(tǒng)的外部與其內(nèi)部的通

5、信通過一個(gè)統(tǒng)一的通過一個(gè)統(tǒng)一的外觀對(duì)象進(jìn)行外觀對(duì)象進(jìn)行,外觀類將客戶端與子系統(tǒng)的內(nèi)部復(fù)雜性分隔開,外觀類將客戶端與子系統(tǒng)的內(nèi)部復(fù)雜性分隔開,使得使得客戶端只需要與外觀對(duì)象打交道,而不需要與子系統(tǒng)內(nèi)部的客戶端只需要與外觀對(duì)象打交道,而不需要與子系統(tǒng)內(nèi)部的很多對(duì)象打交道很多對(duì)象打交道。 外觀模式的目的在于外觀模式的目的在于降低系統(tǒng)的復(fù)雜程度降低系統(tǒng)的復(fù)雜程度。 外觀模式從很大程度上外觀模式從很大程度上提高了客戶端使用的便捷性提高了客戶端使用的便捷性,使得客戶端,使得客戶端無須關(guān)心子系統(tǒng)的工作細(xì)節(jié),通過外觀角色即可調(diào)用相關(guān)功能。無須關(guān)心子系統(tǒng)的工作細(xì)節(jié),通過外觀角色即可調(diào)用相關(guān)功能。 外觀模式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 外觀模式實(shí)例與解析實(shí)例一:電源總開關(guān)實(shí)例一:電源總開關(guān) 現(xiàn)在考察一個(gè)電源總開關(guān)的例子,以便進(jìn)一步說明外觀

7、模式。為了使用方便,一個(gè)電源總開關(guān)可以控制四盞燈、一個(gè)風(fēng)扇、一臺(tái)空調(diào)和一臺(tái)電視機(jī)的啟動(dòng)和關(guān)閉。通過該電源總開關(guān)可以同時(shí)控制上述所有電器設(shè)備,使用外觀模式設(shè)計(jì)該系統(tǒng)。外觀模式w 外觀模式實(shí)例與解析實(shí)例一:電源總開關(guān)實(shí)例一:電源總開關(guān)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 外觀模式實(shí)例與解析實(shí)例一:電源總開關(guān)實(shí)例一:電源總開關(guān) 參考代碼 (Chapter 14 Facadesample01)演示演示外觀模式w 外觀模式實(shí)例與解析實(shí)例二:文件加密實(shí)例二:文件加密 某系統(tǒng)需要提供一個(gè)文件加密模塊,加密流程包括三個(gè)操作,分別是讀取源文件、加密、保存加密之后的文件。讀取文件和保存文

9、件使用流來實(shí)現(xiàn),這三個(gè)操作相對(duì)獨(dú)立,其業(yè)務(wù)代碼封裝在三個(gè)不同的類中?,F(xiàn)在需要提供一個(gè)統(tǒng)一的加密外觀類,用戶可以直接使用該加密外觀類完成文件的讀取、加密和保存三個(gè)操作,而不需要與每一個(gè)類進(jìn)行交互,使用外觀模式設(shè)計(jì)該加密模塊。外觀模式w 外觀模式實(shí)例與解析實(shí)例二:文件加密實(shí)例二:文件加密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 模式優(yōu)缺點(diǎn)外觀模式的優(yōu)點(diǎn)外觀模式的優(yōu)點(diǎn) 對(duì)客戶屏蔽子系統(tǒng)組件,減少了客戶處理的對(duì)象數(shù)目并使得子系統(tǒng)使用起來更加容易。通過引入外觀模式,客戶代碼將變得很簡單,與之關(guān)聯(lián)的對(duì)象也很少。 實(shí)現(xiàn)了子系統(tǒng)與客戶之間的松耦合關(guān)系,這使得子系統(tǒng)的組件變化不會(huì)影響到調(diào)用它的客戶類,只需要調(diào)整外觀類即可。 降低了大型軟件系統(tǒng)中的編譯依賴性,并簡化了系統(tǒng)在不同平臺(tái)之間的移植過程,因?yàn)榫幾g一個(gè)子系統(tǒng)一般不需要編譯所有其他的子系統(tǒng)。一個(gè)子系統(tǒng)的修改對(duì)其他子系統(tǒng)沒有任何影

12、響,而且子系統(tǒng)內(nèi)部變化也不會(huì)影響到外觀對(duì)象。 只是提供了一個(gè)訪問子系統(tǒng)的統(tǒng)一入口,并不影響用戶直接使用子系統(tǒng)類。外觀模式w 模式優(yōu)缺點(diǎn)外觀模式的缺點(diǎn)外觀模式的缺點(diǎn) 不能很好地限制客戶使用子系統(tǒng)類,如果對(duì)客戶訪問子系統(tǒng)類做太多的限制則減少了可變性和靈活性。 在不引入抽象外觀類的情況下,增加新的子系統(tǒng)可能需要修改外觀類或客戶端的源代碼,違背了“開閉原則”。外觀模式w 模式適用環(huán)境在以下情況下可以使用外觀模式:在以下情況下可以使用外觀模式: 當(dāng)要為一個(gè)復(fù)雜子系統(tǒng)提供一個(gè)簡單接口時(shí)可以使用外觀模式。該接口可以滿足大多數(shù)用戶的需求,而且用戶也可以越過外觀類直接訪問子系統(tǒng)。 客戶程序與多個(gè)子系統(tǒng)之間存在很

13、大的依賴性。引入外觀類將子系統(tǒng)與客戶以及其他子系統(tǒng)解耦,可以提高子系統(tǒng)的獨(dú)立性和可移植性。 在層次化結(jié)構(gòu)中,可以使用外觀模式定義系統(tǒng)中每一層的入口,層與層之間不直接產(chǎn)生聯(lián)系,而通過外觀類建立聯(lián)系,降低層之間的耦合度。外觀模式w 模式應(yīng)用 (1) 外觀模式應(yīng)用于外觀模式應(yīng)用于JDBC數(shù)據(jù)庫操作數(shù)據(jù)庫操作 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 模式應(yīng)用 (2) Session外觀模式外觀模式是外觀模式在是外觀模式在Java EE框架中的應(yīng)用。框架中的應(yīng)用。 ClientObjectSessionFacade-object1objectN: BusinessObject1: BusinessObjectN+businessMethod1 ()businessMethod2 ()

15、.: void: voidBusinessObject1+businessMethodA1 ()businessMethodA2 ().: void: voidBusinessObjectN+businessMethodN1 ()businessMethodN2 ().: void: void外觀模式w 模式擴(kuò)展一個(gè)系統(tǒng)有多個(gè)外觀類一個(gè)系統(tǒng)有多個(gè)外觀類 在外觀模式中,通常只需要一個(gè)外觀類,并且此外觀類只有一個(gè)實(shí)例,換言之它是一個(gè)單例類。在很多情況下為了節(jié)約系統(tǒng)資源,一般將外觀類設(shè)計(jì)為單例類。當(dāng)然這并不意味著在整個(gè)系統(tǒng)里只能有一個(gè)外觀類,在一個(gè)系統(tǒng)中可以設(shè)計(jì)多個(gè)外觀類,每個(gè)外觀類都負(fù)責(zé)和一些特定

16、的子系統(tǒng)交互,向用戶提供相應(yīng)的業(yè)務(wù)功能。外觀模式w 模式擴(kuò)展不要試圖通過外觀類為子系統(tǒng)增加新行為不要試圖通過外觀類為子系統(tǒng)增加新行為 不要通過繼承一個(gè)外觀類在子系統(tǒng)中加入新的行為,這種做法是錯(cuò)誤的。外觀模式的用意是為子系統(tǒng)提供一個(gè)集中化和簡化的溝通渠道,而不是向子系統(tǒng)加入新的行為,新的行為的增加應(yīng)該通過修改原有子系統(tǒng)類或增加新的子系統(tǒng)類來實(shí)現(xiàn),不能通過外觀類來實(shí)現(xiàn)。外觀模式w 模式擴(kuò)展外觀模式與迪米特法則外觀模式與迪米特法則 外觀模式創(chuàng)造出一個(gè)外觀對(duì)象,將客戶端所涉及的屬于一個(gè)子系統(tǒng)的協(xié)作伙伴的數(shù)量減到最少,使得客戶端與子系統(tǒng)內(nèi)部的對(duì)象的相互作用被外觀對(duì)象所取代。外觀類充當(dāng)了客戶類與子系統(tǒng)類之

17、間的“第三者”,降低了客戶類與子系統(tǒng)類之間的耦合度,外觀模式就是實(shí)現(xiàn)代碼重構(gòu)以便達(dá)到“迪米特法則”要求的一個(gè)強(qiáng)有力的武器。外觀模式w 模式擴(kuò)展抽象外觀類的引入抽象外觀類的引入 外觀模式最大的缺點(diǎn)在于違背了“開閉原則”,當(dāng)增加新的子系統(tǒng)或者移除子系統(tǒng)時(shí)需要修改外觀類,可以通過引入抽象外觀類在一定程度上解決該問題,客戶端針對(duì)抽象外觀類進(jìn)行編程。對(duì)于新的業(yè)務(wù)需求,不修改原有外觀類,而對(duì)應(yīng)增加一個(gè)新的具體外觀類,由新的具體外觀類來關(guān)聯(lián)新的子系統(tǒng)對(duì)象,同時(shí)通過修改配置文件來達(dá)到不修改源代碼并更換外觀類的目的。 外觀模式w 模式擴(kuò)展抽象外觀類的引入抽象外觀類的引入 ConcreteFacade1+meth

18、od1 ()method2 ().: void: voidSubSystem1SubSystem2SubSystem3AbstractFacade+method1 ()method2 ().: void: voidSubSystem4SubSystem5ConcreteFacade2+method1 ()method2 ().: void: voidClient本章小結(jié)w 在外觀模式中,外部與一個(gè)子系統(tǒng)的通信必須通過一個(gè)統(tǒng)一的外觀對(duì)象進(jìn)行,為子系統(tǒng)中的一組接口提供一個(gè)一致的界面,外觀模式定義了一個(gè)高層接口,這個(gè)接口使得這一子系統(tǒng)更加容易使用。外觀模式又稱為門面模式,它是一種對(duì)象結(jié)構(gòu)型模式。w 外觀模式包含兩個(gè)角色:外觀角色是在客戶端直接調(diào)用的角色,在外觀角色中可以知道相關(guān)的(一個(gè)或者多個(gè))子系統(tǒng)的功能和責(zé)任,它將所有從客戶端發(fā)來的請(qǐng)求委派到相應(yīng)的子系統(tǒng)去,傳遞給相應(yīng)的子系統(tǒng)對(duì)象處理;在軟件系統(tǒng)中可以同時(shí)有一個(gè)或者多個(gè)子系統(tǒng)角色,每一個(gè)子系統(tǒng)可以不是一個(gè)單獨(dú)的類,而是一個(gè)類的集合,它實(shí)現(xiàn)子系統(tǒng)的功能。w 外觀模式要求一個(gè)子系統(tǒng)的外部與其內(nèi)部的通信通過一個(gè)統(tǒng)一的外觀對(duì)象進(jìn)行,外觀類將客戶端與子系統(tǒng)的內(nèi)部復(fù)雜性分隔開,使得客戶端只需要與外

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論