一、什麼是外觀模式 定義:為子系統中的一組介面提供一個一致的界面,用來訪問子系統中的一群介面。 外觀模式組成: Facade:負責子系統的的封裝調用 Subsystem Classes:具體的子系統,實現由外觀模式Facade對象來調用的具體任務 二、外觀模式的使用場景 1、設計初期階段,應該有意識 ...
一、什麼是外觀模式
定義:為子系統中的一組介面提供一個一致的界面,用來訪問子系統中的一群介面。
外觀模式組成:
Facade:負責子系統的的封裝調用
Subsystem Classes:具體的子系統,實現由外觀模式Facade對象來調用的具體任務
二、外觀模式的使用場景
1、設計初期階段,應該有意識的將不同層分離,層與層之間建立外觀模式;
2、開發階段,子系統越來越複雜,增加外觀模式提供一個簡單的調用介面;
3、維護一個大型遺留系統的時候,可能這個系統已經非常難以維護和擴展,但又包含非常重要的功能,為其開發一個外觀類,以便新系統與其交互。
三、外觀模式的優缺點
優點:
1、實現了子系統與客戶端之間的松耦合關係;
2、客戶端屏蔽了子系統組件,減少了客戶端所需處理的對象數目,並使得子系統使用起來更加容易。
缺點:
1、不符合開閉原則,如果要修改某一個子系統的功能,通常外觀類也要一起修改;
2、沒有辦法直接阻止外部不通過外觀類訪問子系統的功能,因為子系統類中的功能必須是公開的(根據需要決定是否使用internal訪問級別可解決這個缺點,但外觀類需要和子系統類在同一個程式集內)。
四、外觀模式的實現
先寫出四個子系統的類
class SubSystemOne { public void MethodOne() { Console.WriteLine("子系統方法一"); } } class SubSystemTwo { public void MethodTwo() { Console.WriteLine("子系統方法二"); } } class SubSystemThree { public void MethodThree() { Console.WriteLine("子系統方法三"); } } class SubSystemFour { public void MethodFour() { Console.WriteLine("子系統犯法四"); } }
引入外觀類,減少子系統類之間的交互
class Facade { SubSystemOne one; SubSystemTwo two; SubSystemThree three; SubSystemFour four; public Facade() { one = new SubSystemOne(); two = new SubSystemTwo(); three = new SubSystemThree(); four = new SubSystemFour(); } public void MethodA() { Console.WriteLine("\n方法組合A()---"); one.MethodOne(); two.MethodTwo(); four.MethodFour(); } public void MethodB() { Console.WriteLine("\n方法組B()---"); two.MethodTwo(); three.MethodThree(); } }
客戶端代碼:
static void Main(string[] args) { Facade facade = new Facade(); facade.MethodA(); facade.MethodB(); Console.Read(); }