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");
            }
        }
    }
  • 相关阅读:
    面向接口编程详解(二)——编程实例
    面向接口编程详解(一)——思想基础
    设计模式之面向接口编程
    EF数据注解
    很多人不知道可以使用这种 key 的方式来对 Vue 组件时行重新渲染
    这是最新的一波Vue实战技巧,不用则已,一用惊人
    Node.js 进阶-你应该知道的 npm 知识都在这
    Vue响应式原理
    eslint规则
    简述vue-cli中chainWebpack的使用方法
  • 原文地址:https://www.cnblogs.com/lgxlsm/p/4641673.html
Copyright © 2011-2022 走看看