設計模式之外觀模式

外觀模式的定義

Provide a unified interface to a set of interfaces in a subsystem. Facade defines a higher-level interface that makes the subsystem easier to use.

為子系統的接口集合提供一個統一接口,Facade定義高層接口使得子系統更容易使用。

外觀模式的動因

將系統分解為子系統有助於降低系統複雜性,系統的通用設計目標是最小化子系統間的通信和依賴。實現該設計目標的一種方式是引入外觀對象,為子系統中的通用設施提供一個單一併且簡單的接口。

設計模式之外觀模式

拆分後的子系統可能非常多且複雜,外部客戶端直接與子系統類交互會導致複雜的交互關係,導致維護性降低,同時提高了系統間的耦合。

外觀模式的結構

設計模式之外觀模式

外觀對象:Facade

  • 知道請求由哪個子系統類負責響應
  • 將客戶單請求委派給合適的子系統對象

子系統類:subsystem classes

  • 實現子系統功能
  • 處理分配到外觀對象的工作任務
  • 對外觀對象無感知,不持有外觀對象引用

基於外觀模式,客戶端請求首先到達外觀類,並由外觀類負責路由並委託到具體的子系統類處理邏輯。由此,客戶端通過外觀類提供的一致接口對子系統進行間接訪問,解耦了客戶端與子系統。

外觀模式的優點

  • 降低了系統相互依賴,客戶端只對外觀類進行依賴,與子系統實現類無關,降低了客戶端和子系統間的耦合
  • 屏蔽複雜性:外觀類對子系統的複雜性進行了屏蔽,客戶端無需感知子系統的存在
  • 提高安全性:外觀類對子系統類提供了安全訪問點,只允許需要暴露的子系統類才能通過外觀對象進行訪問

外觀模式的缺點

  • 外觀對象僅僅是客戶端與子系統交互的可選方式,並不是唯一方式,客戶端依然可以直接訪問子系統。
  • 不符合開閉原則,在不引入抽象外觀類的情況下,新增的需求可能需要修改外觀類。因此,需要對外觀類進行抽象以進行擴展。

外觀模式的適用場景

  • 如果希望對複雜子系統提供一個簡單接口
  • 如果在客戶端和某個抽象的實現類間存在過多的依賴
  • 如果希望對子系統進行分層設計

與適配器模式區別

本質上二者的模式意圖不同:適配器是將接口轉換為不同接口,外觀模式是提供一個統一的接口來簡化子系統的訪問。


分享到:


相關文章: