C設(shè)計(jì)模式外觀模式_第1頁
C設(shè)計(jì)模式外觀模式_第2頁
C設(shè)計(jì)模式外觀模式_第3頁
C設(shè)計(jì)模式外觀模式_第4頁
C設(shè)計(jì)模式外觀模式_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

DesignPatterns外觀模式劉偉(Sunny)大綱外觀模式概述外觀模式的結(jié)構(gòu)與實(shí)現(xiàn)外觀模式的應(yīng)用實(shí)例抽象外觀類外觀模式的優(yōu)缺點(diǎn)與適用環(huán)境公司前臺(tái)是企業(yè)內(nèi)部與外界交互的接口2外觀模式概述兩種喝茶方式示意圖3外觀模式概述分析一個(gè)客戶類需要和多個(gè)業(yè)務(wù)類交互,而這些需要交互的業(yè)務(wù)類經(jīng)常會(huì)作為一個(gè)整體出現(xiàn)引入一個(gè)新的外觀類(Facade)來負(fù)責(zé)和多個(gè)業(yè)務(wù)類【子系統(tǒng)(Subsystem)】進(jìn)行交互,而客戶類只需與外觀類交互為多個(gè)業(yè)務(wù)類的調(diào)用提供了一個(gè)統(tǒng)一的入口,簡化了類與類之間的交互4外觀模式概述分析沒有外觀類:每個(gè)客戶類需要和多個(gè)子系統(tǒng)之間進(jìn)行復(fù)雜的交互,系統(tǒng)的耦合度將很大引入外觀類:客戶類只需要直接與外觀類交互,客戶類與子系統(tǒng)之間原有的復(fù)雜引用關(guān)系由外觀類來實(shí)現(xiàn),從而降低了系統(tǒng)的耦合度5外觀模式概述分析一個(gè)子系統(tǒng)的外部與其內(nèi)部的通信通過一個(gè)統(tǒng)一的外觀類進(jìn)行,外觀類將客戶類與子系統(tǒng)的內(nèi)部復(fù)雜性分隔開,使得客戶類只需要與外觀角色打交道,而不需要與子系統(tǒng)內(nèi)部的很多對(duì)象打交道6外觀模式概述外觀模式的定義對(duì)象結(jié)構(gòu)型模式外觀模式:為子系統(tǒng)中的一組接口提供一個(gè)統(tǒng)一的入口。外觀模式定義了一個(gè)高層接口,這個(gè)接口使得這一子系統(tǒng)更加容易使用。FacadePattern:Provideaunifiedinterfacetoasetofinterfacesinasubsystem.Facadedefinesahigher-levelinterfacethatmakesthesubsystemeasiertouse.7外觀模式概述外觀模式的定義又稱為門面模式是迪米特法則的一種具體實(shí)現(xiàn)通過引入一個(gè)新的外觀角色來降低原有系統(tǒng)的復(fù)雜度,同時(shí)降低客戶類與子系統(tǒng)的耦合度所指的子系統(tǒng)是一個(gè)廣義的概念,它可以是一個(gè)類、一個(gè)功能模塊、系統(tǒng)的一個(gè)組成部分或者一個(gè)完整的系統(tǒng)8外觀模式的結(jié)構(gòu)與實(shí)現(xiàn)外觀模式的結(jié)構(gòu)9外觀模式的結(jié)構(gòu)與實(shí)現(xiàn)外觀模式的結(jié)構(gòu)外觀模式包含以下2個(gè)角色:Facade(外觀角色)SubSystem(子系統(tǒng)角色)10外觀模式的結(jié)構(gòu)與實(shí)現(xiàn)外觀模式的實(shí)現(xiàn)子系統(tǒng)類典型代碼:classSubSystemA{publicvoidMethodA(){//業(yè)務(wù)實(shí)現(xiàn)代碼}}classSubSystemB{publicvoidMethodB(){//業(yè)務(wù)實(shí)現(xiàn)代碼}}classSubSystemC{publicvoidMethodC(){//業(yè)務(wù)實(shí)現(xiàn)代碼}}11外觀模式的結(jié)構(gòu)與實(shí)現(xiàn)外觀模式的實(shí)現(xiàn)外觀類典型代碼:classFacade{privateSubSystemAobj1=newSubSystemA();privateSubSystemBobj2=newSubSystemB();privateSubSystemCobj3=newSubSystemC();publicvoidMethod(){obj1.MethodA();obj2.MethodB();obj3.MethodC();}}12外觀模式的結(jié)構(gòu)與實(shí)現(xiàn)外觀模式的實(shí)現(xiàn)客戶類典型代碼:classProgram{staticvoidMain(string[]args){Facadefacade=newFacade();facade.Method();}}13外觀模式的應(yīng)用實(shí)例實(shí)例說明某軟件公司要開發(fā)一個(gè)可應(yīng)用于多個(gè)軟件的文件加密模塊,該模塊可以對(duì)文件中的數(shù)據(jù)進(jìn)行加密并將加密之后的數(shù)據(jù)存儲(chǔ)在一個(gè)新文件中,具體的流程包括3個(gè)部分,分別是讀取源文件、加密、保存加密之后的文件,其中,讀取文件和保存文件使用流來實(shí)現(xiàn),加密操作通過求模運(yùn)算實(shí)現(xiàn)。這3個(gè)操作相對(duì)獨(dú)立,為了實(shí)現(xiàn)代碼的獨(dú)立重用,讓設(shè)計(jì)更符合單一職責(zé)原則,這3個(gè)操作的業(yè)務(wù)代碼封裝在3個(gè)不同的類中?,F(xiàn)使用外觀模式設(shè)計(jì)該文件加密模塊。14外觀模式的應(yīng)用實(shí)例實(shí)例類圖文件加密模塊結(jié)構(gòu)圖15外觀模式的應(yīng)用實(shí)例實(shí)例代碼(1):文件讀取類,充當(dāng)子系統(tǒng)類(2)CipherMachine:數(shù)據(jù)加密類,充當(dāng)子系統(tǒng)類(3):文件保存類,充當(dāng)子系統(tǒng)類(4)EncryptFacade:加密外觀類,充當(dāng)外觀類(5)Program:客戶端測(cè)試類演示……參考代碼(DesignPattern\FacadeSample)16外觀模式的應(yīng)用實(shí)例結(jié)果及分析Helloworld!23336406232517抽象外觀類動(dòng)機(jī)在標(biāo)準(zhǔn)的外觀模式的結(jié)構(gòu)圖中,如果需要增加、刪除或更換與外觀類交互的子系統(tǒng)類,必須修改外觀類或客戶端的源代碼,這將違背開閉原則,因此可以通過引入抽象外觀類對(duì)系統(tǒng)進(jìn)行改進(jìn),在一定程度上解決該問題18抽象外觀類結(jié)構(gòu)19抽象外觀類實(shí)現(xiàn)namespaceFacadeSample{abstractclassAbstractEncryptFacade{publicabstractvoid(string,string);}}namespaceFacadeSample{classNewEncryptFacade:AbstractEncryptFacade{privatereader;privateNewCipherMachinecipher;privatewriter;publicNewEncryptFacade(){reader=new();cipher=newNewCipherMachine();writer=new();}publicoverridevoid(string,string){stringplainStr=reader.Read();stringencryptStr=cipher.Encrypt(plainStr);writer.Write(encryptStr,);}}}<?xmlversion="1.0"encoding="utf-8"?><configuration><appSettings><addkey="facade"value="FacadeSample.NewEncryptFacade"/></appSettings></configuration>usingSystem;usingSystem.Configuration;usingSystem.Reflection;namespaceFacadeSample{classProgram{staticvoidMain(string[]args){AbstractEncryptFacadeef;//針對(duì)抽象外觀類編程//讀取配置文件stringfacadeString=ConfigurationManager.AppSettings["facade"];//反射生成對(duì)象ef=(AbstractEncryptFacade)Assembly.Load("FacadeSample").CreateInstance(facadeString);ef.("src.txt","des.txt");Console.Read();}}}20外觀模式的優(yōu)缺點(diǎn)與適用環(huán)境模式優(yōu)點(diǎn)它對(duì)客戶端屏蔽了子系統(tǒng)組件,減少了客戶端所需處理的對(duì)象數(shù)目,并使得子系統(tǒng)使用起來更加容易它實(shí)現(xiàn)了子系統(tǒng)與客戶端之間的松耦合關(guān)系,這使得子系統(tǒng)的變化不會(huì)影響到調(diào)用它的客戶端,只需要調(diào)整外觀類即可一個(gè)子系統(tǒng)的修改對(duì)其他子系統(tǒng)沒有任何影響,而且子系統(tǒng)的內(nèi)部變化也不會(huì)影響到外觀對(duì)象21外觀模式的優(yōu)缺點(diǎn)與適用環(huán)境模式缺點(diǎn)不能很好地限制客戶端直接使用子系統(tǒng)類,如果對(duì)客戶端訪問子系統(tǒng)類做太多的限制則

溫馨提示

  • 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)論