天天看點

【設計模式】外觀模式降低系統耦合(一)一、摘要二、外觀模式概述三、定義四、結構五、使用場景

一、摘要

外觀模式(Facade)是一個使用頻率非常高的設計模式之一。

它通過為子系統中的一組接口提供一個一緻的界面,定義一個高層接口,這個接口使得這一子系統更加容易使用。

二、外觀模式概述

現在越來越多的人喜歡到外面的餐館吃飯,不知道大家有沒有留意在家裡自己做飯和去外面吃有什麼差別?

如果是自己做飯就要買菜、洗菜、做菜、吃菜。而在餐館吃飯隻需要對服務員說,我要什麼什麼菜。正是因為餐館有了服務員,它可以為我們提供接口,不用我們親自去接觸菜、不用動手做菜。

服務員就相當是我們的外觀模式,避免了我們與那些環節直接接觸,讓整個過程變得簡單。

【設計模式】外觀模式降低系統耦合(一)一、摘要二、外觀模式概述三、定義四、結構五、使用場景
圖一 外觀模式買菜吃菜
           

在系統設計中,某一個系統可能非常龐大,使用者要使用該系統就不得不掌握大量的接口,造成使用的不便。這時我們就需要一個類似餐館服務員的類,用它來給系統進行交流,我們隻需要和這個類進行交流就可以了。這個類就是我們所說的外觀模式(Facade)

這時可以考慮将該系統細分成一系列子系統并使子系統間的耦合降到最低,利用外觀模式提供一個外觀對象,為這一系列子系統提供一個簡單的使用接口,這樣使用者隻需要掌握外觀對象上的少量接口即可使用該系統。

【設計模式】外觀模式降低系統耦合(一)一、摘要二、外觀模式概述三、定義四、結構五、使用場景
圖二 外觀模式結構圖
           

三、定義

外觀模式:為子系統中的一組接口提供一個統一的入口。外觀模式定義了一個高層接口,這個接口使得這一子系統更加容易使用。

Facade Pattern: 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:這個外觀類為子系統提供一個共同的對外接口

Clients:客戶對象通過一個外觀接口讀寫子系統中各接口的資料資源。

五、使用場景

在以下情況下可以考慮使用外觀模式:

(1)設計初期階段,應該有意識的将不同層分離,層與層之間建立外觀模式。

(2) 開發階段,子系統越來越複雜,增加外觀模式提供一個簡單的調用接口。

(3) 維護一個大型遺留系統的時候,可能這個系統已經非常難以維護和擴充,但又包含非常重要的功能,為其開發一個外觀類,以便新系統與其互動。

【作者:王雷 http://blog.csdn.net/kisscatforever】

未完待續…..

繼續閱讀