這個例子很形象,直接從人家部落格上貼過來的,參考連結在下面
不知道大家有沒有比較過自己泡茶和去茶館喝茶的差別,如果是自己泡茶需要自行準備茶葉、茶具和開水,如圖1(A)所示,而去茶館喝茶,最簡單的方式就是跟茶館服務員說想要一杯什麼樣的茶,是鐵觀音、碧螺春還是西湖龍井?正因為茶館有服務員,顧客無須直接和茶葉、茶具、開水等互動,整個泡茶過程由服務員來完成,顧客隻需與服務員互動即可,整個過程非常簡單省事,如圖1(B)所示。

在軟體開發中,有時候為了完成一項較為複雜的功能,一個客戶類需要和多個業務類互動,而這些需要互動的業務類經常會作為一個整體出現,由于涉及到的類比較多,導緻使用時代碼較為複雜,此時,特别需要一個類似服務員一樣的角色,由它來負責和多個業務類進行互動,而客戶類隻需與該類互動。外觀模式通過引入一個新的外觀類(Facade)來實作該功能,外觀類充當了軟體系統中的“服務員”,它為多個業務類的調用提供了一個統一的入口,簡化了類與類之間的互動。在外觀模式中,那些需要互動的業務類被稱為子系統(Subsystem)。如果沒有外觀類,那麼每個客戶類需要和多個子系統之間進行複雜的互動,系統的耦合度将很大;而引入外觀類之後,客戶類隻需要直接與外觀類互動,客戶類與子系統之間原有的複雜引用關系由外觀類來實作,進而降低了系統的耦合度。
外觀模式為系統中的一組接口提供一個一緻的界面,定義一個高層接口,這個接口使得子系統更加容易使用。
1).門面角色:外觀模式的核心。它被客戶角色調用,它熟悉子系統的功能。内部根據客戶角色的需求預定了幾種功能的組合。
2).子系統角色:實作了子系統的功能。它對客戶角色和Facade時未知的。它内部可以有系統内的互相互動,也可以由供外界調用的接口。
3).客戶角色:通過調用Facede來完成要實作的功能。
比如經典的MVC三層架構
1.減少系統互相依賴,降低耦合, 為複雜的子產品或子系統提供外界通路的子產品
2.提高靈活性,子系統相對獨立
3.提高安全性,預防低水準人員帶來的風險