Facade(外观)--对象结构型模式
Facade(外觀)–對象結構型模式
一、意圖
為子系統中的一組接口提供一個一致的界面,Facade模式定義了一個高層接口,這個接口使得這一子系統更加容易使用。
二、動機
1.上述左邊方案的問題在于組件的客戶和組件中各種復雜的子系統有了過多的耦合,隨著外部客戶程序和各子系統的演化,這種過多的耦合面臨很多變化的挑戰。
2,如何簡化外部客戶程序和系統間的接口?如何將外部客戶程序的演化和內部子系統的變化之間的依賴相互解耦?
三、適用性
1.當你要為一個復雜子系統提供一個簡單的接口時。子系統往往因為不斷演化而變得越來越復雜。大多數模式使用時都會產生更多更小的類。這使得子系統更具有可重用性,也更容易對子系統進行定制,但這也給那些不需要定制子系統的用戶帶來了一些使用上的困難。Facade可以提供一個簡單的缺省視圖,這一視圖對大多數用戶來說已經足夠,而那些需要更多的可定制性的用戶可以越過Facade層。
2.客戶程序與抽象類的實現部分之間存在著很大的依賴性。引入facade將這個子系統與客戶以及其他的子系統分離,可以提高子系統的獨立性和可移植性。
3.當你需要構建一個層次結構的子系統時,使用facade模式定義子系統中每層的入口點。如果子系統之間是相互依賴的,你可以讓它們僅通過facade進行通訊,從而簡化了它們之間的依賴關系。
四、結構
五、效果
1.它對客戶屏蔽子系統組件,因為減少了客戶處理的對象的數目并使得子系統使用起來更加方便。
2.它實現了子系統與客戶之間的耦合關系,而子系統內部的功能組件往往是緊耦合的。松耦合的關系是的子系統的組件變化不會影響到它的客戶。Facade模式有助于建立層次結構系統,也有助于對對象之間的依賴關系分層。Facade模式可以消除復雜的循環依賴關系。這一點在客戶程序與子系統時分別實現的時候尤為重要。
3.如果應用需要,它并不限制它們使用子類系統。因此你可以在系統易用性和通用型之間加以選擇。
六、實現
1.降低客戶-子系統之間的耦合度。
2.公共子系統與私有子系統類。
七、要點總結
1.從客戶程序的角度來看,Facade模式簡化了整個組件系統的接口,對于組件內部與外部客戶程序來說,達到了一種“解耦”的效果——內部子系統的任何變化不會影響到Facade接口的變化。
2.Facade設計模式更注重從架構的層次看整個系統,而不是單個類的層次。Facade很多時候更是一種架構設計模式。
3.Facade設計模式并非一個集裝箱,可以任意地放進任何多個對象。Facade模式中組件內部應該是“相互耦合關系比較大的一系統組件”,而不是一個簡單的功能集合。
八、相關模式
Abstract Factory模式可以與Facade模式一起使用以提供一個接口,這一接口可用來以一種子系統獨立的方式創建的子對象。Abstract Factroy也可以代替Facade模式隱藏那些與平臺相關的類。
Mediator模式與Facade模式的相似之處是,它抽象了一些已有的類的功能。然而,Mediator的目的是對同事之間的任意通訊進行抽象,通常集中不屬于任何單個對象的功能。Mediator的同事對象知道中介者并與它通信,而不是直接與其他對象通信。相對而言,Facade模式僅對于子系統對象的接口進行抽象,從而使它們更容易使用;它并不定義新功能。子系統也不知道facade的存在。
通常來講,僅需要一個Facade對象,因此Facade對象通常屬于Singleton模式。
九、舉例說明
想了解一個村,簡單的方式先問村長。
本文為李建忠設計模式視頻的筆記以及《設計模式-可復用面向對象的軟件的基礎》和自己的部分見解
總結
以上是生活随笔為你收集整理的Facade(外观)--对象结构型模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎样瘦大腿和小腿
- 下一篇: Flyweight(享元)--对象结构型