這個例子很形象,直接從人家博客上貼過來的,參考連接在下面html
不知道你們有沒有比較過本身泡茶和去茶館喝茶的區別,若是是本身泡茶須要自行準備茶葉、茶具和開水,如圖1(A)所示,而去茶館喝茶,最簡單的方式就是跟茶館服務員說想要一杯什麼樣的茶,是鐵觀音、碧螺春仍是西湖龍井?正由於茶館有服務員,顧客無須直接和茶葉、茶具、開水等交互,整個泡茶過程由服務員來完成,顧客只需與服務員交互便可,整個過程很是簡單省事,如圖1(B)所示。python
在軟件開發中,有時候爲了完成一項較爲複雜的功能,一個客戶類須要和多個業務類交互,而這些須要交互的業務類常常會做爲一個總體出現,因爲涉及到的類比較多,致使使用時代碼較爲複雜,此時,特別須要一個相似服務員同樣的角色,由它來負責和多個業務類進行交互,而客戶類只需與該類交互。外觀模式經過引入一個新的外觀類(Facade)來實現該功能,外觀類充當了軟件系統中的「服務員」,它爲多個業務類的調用提供了一個統一的入口,簡化了類與類之間的交互。在外觀模式中,那些須要交互的業務類被稱爲子系統(Subsystem)。若是沒有外觀類,那麼每一個客戶類須要和多個子系統之間進行復雜的交互,系統的耦合度將很大;而引入外觀類以後,客戶類只須要直接與外觀類交互,客戶類與子系統之間原有的複雜引用關係由外觀類來實現,從而下降了系統的耦合度。安全
外觀模式爲系統中的一組接口提供一個一致的界面,定義一個高層接口,這個接口使得子系統更加容易使用。架構
1).門面角色:外觀模式的核心。它被客戶角色調用,它熟悉子系統的功能。內部根據客戶角色的需求預約了幾種功能的組合。
2).子系統角色:實現了子系統的功能。它對客戶角色和Facade時未知的。它內部能夠有系統內的相互交互,也能夠由供外界調用的接口。
3).客戶角色:經過調用Facede來完成要實現的功能。.net
好比經典的MVC三層架構htm
1.減小系統相互依賴,下降耦合, 爲複雜的模塊或子系統提供外界訪問的模塊blog
2.提升靈活性,子系統相對獨立接口
3.提升安全性,預防低水平人員帶來的風險開發
class SubSystemA: def methodA(self): pass class SubSystemB: def methodB(self): pass class SubSystemC: def methodC(self): pass class Facade: objA=None objB=None objC=None def __init__(self): self.objA=SubSystemA() self.objB=SubSystemB() self.objC=SubSystemC() def method(self): self.objA.methodA() self.objB.methodB() self.objC.methodC() def clientUI(): facade=Facade() facade.method() if __name__=='__main__': clientUI()
參考博客
https://www.cnblogs.com/adamjwh/p/9048594.html
https://www.2cto.com/kf/201803/726607.html
https://blog.csdn.net/LoveLion/article/details/8258121
https://blog.csdn.net/ponder008/article/details/6868815