外觀模式-Facade Pattern

設計模式系列

外觀模式:專門給子系統中的一組接口提供一個一致的界面,Facade模式定義了一個高階接口,這個
                  接口使得這一系列子系統更加容易使用。

 

    class Program
    {
        static void Main(string[] args)
        {
            Facade facade = new Facade();
            facade.MethodA();
            facade.MethodB();

        }
    }


    class SubSystemOne
    {
        public void MethodOne()
        {
            Console.WriteLine("SubSystemOne Method");
        }
    }

    class SubSystemTwo
    {
        public void MethodTwo()
        {
            Console.WriteLine("SubSystemTwo Method");
        }
    }
    class SubSystemThree
    {
        public void MethodThree()
        {
            Console.WriteLine("SubSystemThree Method");
        }
    }
    class SubSystemFour
    {
        public void MethodFour()
        {
            Console.WriteLine("SubSystemFour Method");
        }
    }

    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("\nMethodA()");
            one.MethodOne();
            two.MethodTwo();
            four.MethodFour();
        }

        public void MethodB()
        {
            Console.WriteLine("\nMethodB()");
            two.MethodTwo();
            three.MethodThree();

        }

    }

優點:
1.對客戶端隱藏子系統組件,減少客戶的處理對象數目,使得子系統使用更加容易。
2.實現子系統與客戶端得之間低偶合關係,使得子系統變化,不會影響到調用的客戶端類別,只需調整
   外觀類別即可。
3.降低大型系統的依賴性,簡化系統不同平台移植過程。
4.提供一個訪問子系統統一入口,不影響用戶直接使用子系統類。

缺點:
1.不能很好的限制客戶使用子系統類,如果客戶端訪問子系統類做太多限制,減少了可變性和靈活性。
2.增加子系統可能需要修改外觀類別或客戶端程式碼,違背OCP原則

使用場景:
1.為複雜模組或子系統提供外界訪問的模組區塊
2.子系統相互獨立
3.可以使用外觀模式定義系統每一層入口
 

元哥的筆記