Facade模式
Facade模式
一、概述
Facade(外觀)模式為子系統(tǒng)中的各類(或結(jié)構(gòu)與方法)提供一個(gè)簡(jiǎn)明一致的界面,隱藏子系統(tǒng)的復(fù)雜性,使子系統(tǒng)更加容易使用。
實(shí)際應(yīng)用中,我們?cè)趯?duì)付一些老舊的code(尤其是將C的代碼轉(zhuǎn)成C++代碼)或者即便不是老舊code,但涉及多個(gè)子系統(tǒng)時(shí),除了重寫全部代碼(對(duì)于老舊code而言),我們還可能采用這樣一種策略:
重新進(jìn)行類的設(shè)計(jì),將原來分散在源碼中的類/結(jié)構(gòu)及方法重新組合,形成新的、統(tǒng)一的接口,供上層應(yīng)用使用。
這在某種意義上與Adapter及Proxy有類似之處,但是,Proxy(代理)注重在為Client-Subject提供一個(gè)訪問的中間層,如CORBA可為應(yīng)用程序提供透明訪問支持,使應(yīng)用程序無需去考慮平臺(tái)及網(wǎng)絡(luò)造成的差異及其它諸多技術(shù)細(xì)節(jié);Adapter(適配器)注重對(duì)接口的轉(zhuǎn)換與調(diào)整;而Facade所面對(duì)的往往是多個(gè)類或其它程序單元,通過重新組合各類及程序單元,對(duì)外提供統(tǒng)一的接口/界面。
三、應(yīng)用
在遇到以下情況使用Facade模式:
1、當(dāng)你要為一個(gè)復(fù)雜子系統(tǒng)提供一個(gè)簡(jiǎn)單接口時(shí)。子系統(tǒng)往往因?yàn)椴粩嘌莼兊迷絹碓綇?fù)雜。大多數(shù)模式使用時(shí)都會(huì)產(chǎn)生更多更小的類。這使得子系統(tǒng)更具可重用性,也更容易對(duì)子系統(tǒng)進(jìn)行定制,但這也給那些不需要定制子系統(tǒng)的用戶帶來一些使用上的困難。
Facade可以提供一個(gè)簡(jiǎn)單的缺省視圖,這一視圖對(duì)大多數(shù)用戶來說已經(jīng)足夠,而那些需要更多的可定制性的用戶可以越過Facade層。
2、客戶程序與抽象類的實(shí)現(xiàn)部分之間存在著很大的依賴性。引入Facade將這個(gè)子系統(tǒng)與客戶以及其他的子系統(tǒng)分離,可以提高子系統(tǒng)的獨(dú)立性和可移植性。
3、當(dāng)你需要構(gòu)建一個(gè)層次結(jié)構(gòu)的子系統(tǒng)時(shí),使用Facade模式定義子系統(tǒng)中每層的入口點(diǎn),如果子系統(tǒng)之間是相互依賴的,你可以讓它們僅通過Facade進(jìn)行通訊,從而簡(jiǎn)化了它們之間的依賴關(guān)系。
四、優(yōu)缺點(diǎn)
Facade模式有下面一些優(yōu)點(diǎn):
1、它對(duì)客戶屏蔽子系統(tǒng)組件,因而減少了客戶處理的對(duì)象的數(shù)目并使得子系統(tǒng)使用起來更加方便。
2、它實(shí)現(xiàn)了子系統(tǒng)與客戶之間的松耦合關(guān)系,而子系統(tǒng)內(nèi)部的功能組件往往是緊耦合的。
松耦合關(guān)系使得子系統(tǒng)的組件變化不會(huì)影響到它的客戶。Facade模式有助于建立層次結(jié)構(gòu)系統(tǒng),也有助于對(duì)對(duì)象之間的依賴關(guān)系分層。Facade模式可以消除復(fù)雜的循環(huán)依賴關(guān)系。這一點(diǎn)在客戶程序與子系統(tǒng)是分別實(shí)現(xiàn)的時(shí)候尤為重要。
在大型軟件系統(tǒng)中降低編譯依賴性至關(guān)重要。在子系統(tǒng)類改變時(shí),希望盡量減少重編譯工作以節(jié)省時(shí)間。用Facade可以降低編譯依賴性,限制重要系統(tǒng)中較小的變化所需的重編譯工作。Facade模式同樣也有利于簡(jiǎn)化系統(tǒng)在不同平臺(tái)之間的移植過程,因?yàn)榫幾g一個(gè)子系統(tǒng)一般不需要編譯所有其他的子系統(tǒng)。
3、如果應(yīng)用需要,它并不限制它們使用子系統(tǒng)類。因此你可以在系統(tǒng)易用性和通用性之間加以選擇。
一、概述
Facade(外觀)模式為子系統(tǒng)中的各類(或結(jié)構(gòu)與方法)提供一個(gè)簡(jiǎn)明一致的界面,隱藏子系統(tǒng)的復(fù)雜性,使子系統(tǒng)更加容易使用。
實(shí)際應(yīng)用中,我們?cè)趯?duì)付一些老舊的code(尤其是將C的代碼轉(zhuǎn)成C++代碼)或者即便不是老舊code,但涉及多個(gè)子系統(tǒng)時(shí),除了重寫全部代碼(對(duì)于老舊code而言),我們還可能采用這樣一種策略:
重新進(jìn)行類的設(shè)計(jì),將原來分散在源碼中的類/結(jié)構(gòu)及方法重新組合,形成新的、統(tǒng)一的接口,供上層應(yīng)用使用。
這在某種意義上與Adapter及Proxy有類似之處,但是,Proxy(代理)注重在為Client-Subject提供一個(gè)訪問的中間層,如CORBA可為應(yīng)用程序提供透明訪問支持,使應(yīng)用程序無需去考慮平臺(tái)及網(wǎng)絡(luò)造成的差異及其它諸多技術(shù)細(xì)節(jié);Adapter(適配器)注重對(duì)接口的轉(zhuǎn)換與調(diào)整;而Facade所面對(duì)的往往是多個(gè)類或其它程序單元,通過重新組合各類及程序單元,對(duì)外提供統(tǒng)一的接口/界面。
三、應(yīng)用
在遇到以下情況使用Facade模式:
1、當(dāng)你要為一個(gè)復(fù)雜子系統(tǒng)提供一個(gè)簡(jiǎn)單接口時(shí)。子系統(tǒng)往往因?yàn)椴粩嘌莼兊迷絹碓綇?fù)雜。大多數(shù)模式使用時(shí)都會(huì)產(chǎn)生更多更小的類。這使得子系統(tǒng)更具可重用性,也更容易對(duì)子系統(tǒng)進(jìn)行定制,但這也給那些不需要定制子系統(tǒng)的用戶帶來一些使用上的困難。
Facade可以提供一個(gè)簡(jiǎn)單的缺省視圖,這一視圖對(duì)大多數(shù)用戶來說已經(jīng)足夠,而那些需要更多的可定制性的用戶可以越過Facade層。
2、客戶程序與抽象類的實(shí)現(xiàn)部分之間存在著很大的依賴性。引入Facade將這個(gè)子系統(tǒng)與客戶以及其他的子系統(tǒng)分離,可以提高子系統(tǒng)的獨(dú)立性和可移植性。
3、當(dāng)你需要構(gòu)建一個(gè)層次結(jié)構(gòu)的子系統(tǒng)時(shí),使用Facade模式定義子系統(tǒng)中每層的入口點(diǎn),如果子系統(tǒng)之間是相互依賴的,你可以讓它們僅通過Facade進(jìn)行通訊,從而簡(jiǎn)化了它們之間的依賴關(guān)系。
四、優(yōu)缺點(diǎn)
Facade模式有下面一些優(yōu)點(diǎn):
1、它對(duì)客戶屏蔽子系統(tǒng)組件,因而減少了客戶處理的對(duì)象的數(shù)目并使得子系統(tǒng)使用起來更加方便。
2、它實(shí)現(xiàn)了子系統(tǒng)與客戶之間的松耦合關(guān)系,而子系統(tǒng)內(nèi)部的功能組件往往是緊耦合的。
松耦合關(guān)系使得子系統(tǒng)的組件變化不會(huì)影響到它的客戶。Facade模式有助于建立層次結(jié)構(gòu)系統(tǒng),也有助于對(duì)對(duì)象之間的依賴關(guān)系分層。Facade模式可以消除復(fù)雜的循環(huán)依賴關(guān)系。這一點(diǎn)在客戶程序與子系統(tǒng)是分別實(shí)現(xiàn)的時(shí)候尤為重要。
在大型軟件系統(tǒng)中降低編譯依賴性至關(guān)重要。在子系統(tǒng)類改變時(shí),希望盡量減少重編譯工作以節(jié)省時(shí)間。用Facade可以降低編譯依賴性,限制重要系統(tǒng)中較小的變化所需的重編譯工作。Facade模式同樣也有利于簡(jiǎn)化系統(tǒng)在不同平臺(tái)之間的移植過程,因?yàn)榫幾g一個(gè)子系統(tǒng)一般不需要編譯所有其他的子系統(tǒng)。
3、如果應(yīng)用需要,它并不限制它們使用子系統(tǒng)類。因此你可以在系統(tǒng)易用性和通用性之間加以選擇。
轉(zhuǎn)載于:https://www.cnblogs.com/wangzhuangye/archive/2009/02/06/1385010.html
總結(jié)
- 上一篇: 牛年牛气冲天
- 下一篇: Arcgis Server初学笔记(一)