天天看點

外觀(門面)模式-結構型

為子系統中的一組接口提供一個一緻的界面, Facade模式定義了一個高層接口,這個接口使得這一子系統更加容易使用。引入外觀角色之後,使用者隻需要直接與外觀角色互動,使用者與子系統之間的複雜關系由外觀角色來實作,進而降低了系統的耦合度。

外觀角色(Facade):是模式的核心,他被客戶client角色調用,知道各個子系統的功能。同時根據客戶角色已有的需求預訂了幾種功能組合\

子系統角色(Subsystem classes):實作子系統的功能,并處理由Facade對象指派的任務。對子系統而言,facade和client角色是未知的,沒有Facade的任何相關資訊;即沒有指向Facade的執行個體。

客戶角色(client):調用facade角色獲得完成相應的功能。

外觀(門面)模式-結構型

優點: 

1)對客戶屏蔽子系統元件,減少了客戶處理的對象數目并使得子系統使用起來更加容易。通過引入外觀模式,客戶代碼将變得很簡單,與之關聯的對象也很少。

2)實作了子系統與客戶之間的松耦合關系,這使得子系統的元件變化不會影響到調用它的客戶類,隻需要調整外觀類即可。

3)降低了大型軟體系統中的編譯依賴性,并簡化了系統在不同平台之間的移植過程,因為編譯一個子系統一般不需要編譯所有其他的子系統。一個子系統的修改對其他子系統沒有任何影響,而且子系統内部變化也不會影響到外觀對象。

4)隻是提供了一個通路子系統的統一入口,并不影響使用者直接使用子系統類。

Facade模式的缺點

1) 不能很好地限制客戶使用子系統類,如果對客戶通路子系統類做太多的限制則減少了可變性和靈活性。

2) 在不引入抽象外觀類的情況下,增加新的子系統可能需要修改外觀類或用戶端的源代碼,違背了“開閉原則”。

    中介模式:Mediator模式與Facade模式的相似之處是,它抽象了一些已有的類的功能。然而,Mediator的目的是對同僚之間的任意通訊進行抽象,通常集中不屬于任何單個對象的功能。Mediator的同僚對象知道中介者并與它通信,而不是直接與其他同類對象通信。相對而言,Facade模式僅對子系統對象的接口進行抽象,進而使它們更容易使用;它并不定義新功能,子系統也不知道Facade的存在。通常來講,僅需要一個Facade對象,是以Facade對象通常屬于Singleton模式。

   Adapter模式:擴充卡模式是将一個接口通過适配來間接轉換為另一個接口。外觀模式的話,其主要是提供一個整潔的一緻的接口給用戶端。

外觀(門面)模式-結構型

繼續閱讀