深入理解設計模式(24):外觀模式


一、什么是外觀模式

定義:為子系統中的一組接口提供一個一致的界面,用來訪問子系統中的一群接口。

 

外觀模式組成:

  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();
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM