zoukankan      html  css  js  c++  java
  • 11.外观模式(Facade Pattern)

    using System;
    
    namespace ConsoleApplication4
    {
        class Program
        {
            /// <summary>
            /// 不使用外观模式的情况
            /// 此时客户端与三个子系统都发送了耦合,使得客户端程序依赖与子系统
            /// 为了解决这样的问题,我们可以使用外观模式来为所有子系统设计一个统一的接口
            /// 客户端只需要调用外观类中的方法就可以了,简化了客户端的操作
            /// 从而让客户和子系统之间避免了紧耦合
            /// </summary>
            /// <param name="args"></param>
            static void Main(string[] args)
            {
                SubSystemA a = new SubSystemA(); 
                SubSystemB b = new SubSystemB(); 
                SubSystemC c = new SubSystemC(); 
                a.MethodA(); 
                b.MethodB(); 
                c.MethodC(); 
                Console.Read();
            }
        }
    
        // 子系统A
        public class SubSystemA
        {
            public void MethodA()
            {
                Console.WriteLine("执行子系统A中的方法A");
            }
        }
    
        // 子系统B
        public class SubSystemB
        {
            public void MethodB()
            {
                Console.WriteLine("执行子系统B中的方法B");
            }
        }
    
        // 子系统C
        public class SubSystemC
        {
            public void MethodC()
            {
                Console.WriteLine("执行子系统C中的方法C");
            }
        }
    }
    using System;
    
    namespace ConsoleApplication4
    {
        class Program
        {
            private static RegistrationFacade facade = new RegistrationFacade();
    
            /// <summary>
            /// 不使用外观模式的情况
            /// 此时客户端与三个子系统都发送了耦合,使得客户端程序依赖与子系统
            /// 为了解决这样的问题,我们可以使用外观模式来为所有子系统设计一个统一的接口
            /// 客户端只需要调用外观类中的方法就可以了,简化了客户端的操作
            /// 从而让客户和子系统之间避免了紧耦合
            /// </summary>
            /// <param name="args"></param>
            static void Main(string[] args)
            {
                facade.RegisterSystem(1);
                facade.RegisterSystem(2);
                facade.RegisterSystem(3);
                Console.Read();
            }
        }
    
        public class RegistrationFacade
        {
            private SubSystemA RegistrationA;
            private SubSystemB RegistrationB;
            private SubSystemC RegistrationC;
            public RegistrationFacade()
            {
                RegistrationA = new SubSystemA();
                RegistrationB = new SubSystemB();
                RegistrationC = new SubSystemC();
            }
    
            public void RegisterSystem(int type)
            {
                if (type == 1)
                {
                    RegistrationA.MethodA();
                }
                else if (type == 2)
                {
                    RegistrationB.MethodB();
                }
                else if (type == 3)
                {
                    RegistrationC.MethodC();
                }
            }
        }
    
        // 子系统A
        public class SubSystemA
        {
            public void MethodA()
            {
                Console.WriteLine("执行子系统A中的方法A");
            }
        }
    
        // 子系统B
        public class SubSystemB
        {
            public void MethodB()
            {
                Console.WriteLine("执行子系统B中的方法B");
            }
        }
    
        // 子系统C
        public class SubSystemC
        {
            public void MethodC()
            {
                Console.WriteLine("执行子系统C中的方法C");
            }
        }
    }
  • 相关阅读:
    Optimization Landscape and Expressivity of DeepCNNs
    Requests从入门到进阶
    互联网架构师学习笔记整理
    使用Psutil监控系统资源
    Mac平台AirtestIDE adb 连接不上Genmotion Android9虚拟机的问题
    Mac版PyCharm,WebStrom闪退的处理办法 LSOpenURLsWithRole() failed with error -10810 for the file /Applications/Web
    Django Admin Cookbook-42如何在Django Admin后台控制台中设置应用程序和模型的顺序
    Django Admin Cookbook-41如何将数据库视图添加到Django Admin后台
    Django Admin Cookbook-40如何为Django Admin覆盖保存操作
    Django Admin Cookbook-39如何两次向Django管理员添加模型
  • 原文地址:https://www.cnblogs.com/lgxlsm/p/4641673.html
Copyright © 2011-2022 走看看