C 設計模式 外觀模式

2022-07-04 08:45:10 字數 2681 閱讀 4956

在軟體開發過程中,客戶端程式經常會與複雜系統的內部子系統進行耦合,從而導致客戶端程式隨著子系統的變化而變化,然而為了將複雜系統的內部子系統與客戶端之間的依賴解耦,從而就有了外觀模式,也稱作 」門面「模式。下面就具體介紹下外觀模式。

一、 外觀(facade)模式

外觀模式提供了乙個統一的介面,用來訪問子系統中的一群介面。外觀定義了乙個高層介面,讓子系統更容易使用。使用外觀模式時,我們建立了乙個統一的類,用來包裝子系統中乙個或多個複雜的類,客戶端可以直接通過外觀類來呼叫內部子系統中方法,從而外觀模式讓客戶和子系統之間避免了緊耦合。

二、 外觀模式的結構

在上面的物件圖中有兩個角色:

三、 外觀模式的實現

下面與學校中乙個選課系統為例來解釋外觀模式,例如在選課系統中,有註冊課程子系統和通知子系統,在不使用外觀模式的情況下,客戶端必須同時儲存註冊課程子系統和通知子系統兩個引用,如果後期這兩個子系統發生改變時,此時客戶端的呼叫**也要隨之改變,這樣就沒有很好的可擴充套件性,下面看看不使用外觀模式下選課系統的實現方式和客戶端呼叫**:

using

system;

//////

不使用外觀模式的情況

///此時客戶端與三個子系統都傳送了耦合,使得客戶端程式依賴與子系統

///為了解決這樣的問題,我們可以使用外觀模式來為所有子系統設計乙個統一的介面

///客戶端只需要呼叫外觀類中的方法就可以了,簡化了客戶端的操作

///從而讓客戶和子系統之間避免了緊耦合

///class

client}//

子系統a

public

class

subsystema}//

子系統b

public

class

subsystemb}//

子系統c

public

class

subsystemc

}

然而外觀模式可以解決我們上面所說的問題,下面具體看看使用外觀模式的實現:

using

system;

//////

以學生選課系統為例子演示外觀模式的使用

///學生選課模組包括功能有:

///驗證選課的人數是否已滿

///通知使用者課程選擇成功與否

///客戶端**

///class

student}//

外觀類public

class

registrationfacade

public

bool registercourse(string coursename, string

studentname)

}#region 子系統

//相當於子系統a

public

class

registercourse

是否人數已滿

", coursename);

return

true

; }}//

相當於子系統b

public

class

notifystudent

發生通知

", studentname);

return

true

; }

}#endregion

使用了外觀模式之後,客戶端只依賴與外觀類,從而將客戶端與子系統的依賴解耦了,如果子系統發生改變,此時客戶端的**並不需要去改變。外觀模式的實現核心主要是——由外觀類去儲存各個子系統的引用,實現由乙個統一的外觀類去包裝多個子系統類,然而客戶端只需要引用這個外觀類,然後由外觀類來呼叫各個子系統中的方法。然而這樣的實現方式非常類似介面卡模式,然而外觀模式與介面卡模式不同的是:介面卡模式是將乙個物件包裝起來以改變其介面,而外觀是將一群物件 」包裝「起來以簡化其介面。它們的意圖是不一樣的,介面卡是將介面轉換為不同介面,而外觀模式是提供乙個統一的介面來簡化介面。四、 使用場景在以下情況下可以考慮使用外觀模式:

五、 外觀模式的優缺點

優點:

外觀模式對客戶遮蔽了子系統元件,從而簡化了介面,減少了客戶處理的物件數目並使子系統的使用更加簡單。

外觀模式實現了子系統與客戶之間的松耦合關係,而子系統內部的功能元件是緊耦合的。松耦合使得子系統的元件變化不會影響到它的客戶。

缺點:

如果增加新的子系統可能需要修改外觀類或客戶端的源**,這樣就違背了」開——閉原則「(不過這點也是不可避免)。

六、 總結

到這裡外觀模式的介紹就結束了,外觀模式,為子系統的一組介面提供乙個統一的介面,該模式定義了乙個高層介面,這乙個高層介面使的子系統更加容易使用。並且外觀模式可以解決層結構分離、降低系統耦合度和為新舊系統互動提供介面功能

C 設計模式 外觀模式

目錄 基本概念 與例項 外觀模式 facade 為子系統中的一組介面提供乙個一致的介面,此模式定義了乙個高層介面,這個介面使得這一子系統更加容易使用。增加外觀facade可以提供乙個簡單的介面,減少它們之間的依賴 為新系統開發乙個外觀facade類,來提供設計粗糙或高度複雜的遺留 的比較清晰簡單的介...

C 設計模式 外觀模式

為子系統中的一組介面提供乙個一致的介面 facade 外觀角色,是在客戶端直接呼叫的角色,在外觀角色中可以知道相關的 乙個或者多個 子系統的功能和責任,它將所有從客戶端發來的請求委派到相應的子系統去,傳遞給相應的子系統物件處理 subsystem 子系統角色,每乙個子系統可以不是乙個單獨的類,而是乙...

C 設計模式 外觀模式

0.c 設計模式 簡單工廠模式 1.c 設計模式 工廠方法模式 2.c 設計模式 抽象工廠模式 3.c 設計模式 單例模式 4.c 設計模式 建造者模式 5.c 設計模式 原型模式 6.c 設計模式 設配器模式 7.c 設計模式 裝飾器模式 8.c 設計模式 模式 外觀模式 facade patte...