外觀模式(facade pattern)
外觀模式(facade pattern)
外觀模式( Facade Pattern),也叫門面模式, 外觀模式的原始定義是:為子系統(tǒng)中的一組接口提供統(tǒng)一的接口。它定義了一個(gè)更高級(jí)別的接口,使子系統(tǒng)更易于使用。外觀模式,是一種通過為多個(gè)復(fù)雜的子系統(tǒng)提供一個(gè)一致的接口,而使這些子系統(tǒng)更加容易被訪問的模式。該模式對(duì)外有一個(gè)統(tǒng)一接口,外部應(yīng)用程序不用關(guān)心內(nèi)部子系統(tǒng)的具體的細(xì)節(jié),這樣會(huì)大大降低應(yīng)用程序的復(fù)雜度,提高了程序的可維護(hù)性。 門面模式有點(diǎn)類似之前講到的迪米特法則(最少知識(shí)原則)和接口隔離原則:兩個(gè)有交互的系統(tǒng),只暴露有限的必要的接口

外觀模式的優(yōu)點(diǎn):
1. 它對(duì)客戶端屏蔽了子系統(tǒng)組件,減少了客戶端所需要處理的對(duì)象數(shù)目,并使子系統(tǒng)使用起來更加的容易.通過引入外觀模式,客戶端代碼將變得很簡單,與之關(guān)聯(lián)的對(duì)象也很少.
2. 它實(shí)現(xiàn)了子系統(tǒng)與客戶端之間的松耦合關(guān)系,這使得子系統(tǒng)的變化不會(huì)影響到調(diào)用它的客戶端,只需要調(diào)整外觀類即可
3. 一個(gè)子系統(tǒng)的修改對(duì)其他子系統(tǒng)沒有任何影響,而子系統(tǒng)內(nèi)部變化也不會(huì)影響到外觀對(duì)象.
外觀模式缺點(diǎn):
1. 不能很好的控制客戶端直接使用子系統(tǒng)類,如果客戶端訪問子系統(tǒng)類做太多的限制則減少了可變性和靈活性.
2. 如果設(shè)計(jì)不當(dāng),增加新的子系統(tǒng)可能需要修改外觀類的源代碼,違背了開閉原則.
使用場(chǎng)景分析:
簡化復(fù)雜系統(tǒng)。 比如,當(dāng)我們開發(fā)了一整套的電商系統(tǒng)后(包括訂單、商品、支付、會(huì)員等系統(tǒng)),我們不能讓用戶依次使用這些系統(tǒng)后才能完成商品的購買,而是需要一個(gè)門戶網(wǎng)站或手機(jī) App 這樣簡化過的門面系統(tǒng)來提供在線的購物功能。減少客戶端處理的系統(tǒng)數(shù)量。 比如,在 Web 應(yīng)用中,系統(tǒng)與系統(tǒng)之間的調(diào)用可能需要處理 Database 數(shù)據(jù)庫、Model 業(yè)務(wù)對(duì)象等,其中使用Database 對(duì)象就需要處理打開數(shù)據(jù)庫、關(guān)閉連接等操作,然后轉(zhuǎn)換為Model 業(yè)務(wù)對(duì)象,實(shí)在是太麻煩了。如果能夠創(chuàng)建一個(gè)數(shù)據(jù)庫使用的門面
(其實(shí)就是常說的 DAO 層),那么實(shí)現(xiàn)以上過程將變得容易很多。讓一個(gè)系統(tǒng)(或?qū)ο螅槎鄠€(gè)系統(tǒng)(或?qū)ο螅┕ぷ鳌?比如,線程池ThreadPool 就是一個(gè)門面模式,它為系統(tǒng)提供了統(tǒng)一的線程對(duì)象的創(chuàng)建、銷毀、使用等。聯(lián)合更多的系統(tǒng)來擴(kuò)展原有系統(tǒng)。 當(dāng)我們的電商系統(tǒng)中需要一些新功能時(shí),比如,人臉識(shí)別,我們可以不需要自行研發(fā),而是購買別家公司的系統(tǒng)來提供服務(wù),這時(shí)通過門面系統(tǒng)就能方便快速地進(jìn)行擴(kuò)展。作為一個(gè)簡潔的中間層。 門面模式還可以用來隱藏或者封裝系統(tǒng)中的分層結(jié)構(gòu),同時(shí)作為一個(gè)簡化的中間層來使用。比如,在秒殺、庫存、錢包等場(chǎng)
景中,我們需要共享有狀態(tài)的數(shù)據(jù)時(shí)(如商品庫存、賬戶里的錢),在不改變?cè)邢到y(tǒng)的前提下,通過一個(gè)中間的共享層(如將秒殺活動(dòng)的商品庫存總
數(shù)統(tǒng)一放在 Redis 里),就能統(tǒng)一進(jìn)行各種服務(wù)(如,秒殺詳情頁、商品詳情頁、購物車等)的調(diào)用。
posted on 2024-03-01 13:41 青山遠(yuǎn)樹 閱讀(96) 評(píng)論(0) 收藏 舉報(bào)
浙公網(wǎng)安備 33010602011771號(hào)