zoukankan      html  css  js  c++  java
  • 结构型模式之外观模式

    概述

    外观模式中,一个子系统的外部与其内部的通信通过一个统一的外观类进行,外观类将客户类与子系统的内部复杂性分隔开,使得客户类只需要与外观角色打交道,而不需要与子系统内部的很多对象打交道

    定义

    为子系统中的一组接口提供一个统一的入口。外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用

    实现

    子系统

        /// <summary>
        /// 注册账号类
        /// </summary>
        public class RegistAccount
        {
            /// <summary>
            /// 注册方法
            /// </summary>
            public void Register()
            {
                Console.WriteLine("账号注册成功...");
            }
        }
        /// <summary>
        /// 购物类
        /// </summary>
        public class Shopping
        {
            public void Shop()
            {
                Console.WriteLine("已选购商品...");
            }
        }
        /// <summary>
        /// 付款类
        /// </summary>
        public class Pay
        {
            public void PayMoney()
            {
                Console.WriteLine("付款成功...");
            }
        }

    外观类

        /// <summary>
        /// 外观类
        /// </summary>
        public class ShoppingFacade
        {
            private Pay pay;
            private Shopping shopping;
            private RegistAccount regist;
            public ShoppingFacade(RegistAccount regist, Shopping shopping, Pay pay)
            {
                this.pay = pay;
                this.shopping = shopping;
                this.regist = regist;
            }
    
            public void Buy()
            {
                regist.Register();
                shopping.Shop();
                pay.PayMoney();
            }
        }

    客户端

        class Program
        {
            static void Main(string[] args)
            {
                var regist = new RegistAccount();
                var shopping = new Shopping();
                var pay = new Pay();
                //通过外观类提供对外的访问接口,简化客户端访问方式
                ShoppingFacade fac = new ShoppingFacade(regist, shopping, pay);
                fac.Buy();
                Console.ReadLine();
            }
        }

    总结

    优点

    1、它对客户端屏蔽了子系统组件,减少了客户端所需处理的对象数目,并使得子系统使用起来更加容易。通过引入外观模式,客户端代码将变得很简单,与之关联的对象也很少。

    2、它实现了子系统与客户端之间的松耦合关系,这使得子系统的变化不会影响到调用它的客户端,只需要调整外观类即可。

    3、一个子系统的修改对其他子系统没有任何影响,而且子系统内部变化也不会影响到外观对象。

    缺点

    1、不能很好地限制客户端直接使用子系统类,如果对客户端访问子系统类做太多的限制则减少了可变性和灵活性。

    2、 如果设计不当,增加新的子系统可能需要修改外观类的源代码,违背了开闭原则。

  • 相关阅读:
    从零开始学 Web 之 Vue.js(一)Vue.js概述,基本结构,指令,事件修饰符,样式
    从零开始学 Web 之 Vue.js(二)过滤器,按键修饰符,自定义指令
    js获取某个时间段前多长时间
    Object.create()详解
    React Redux
    react 路由按需加载
    react @types/react-router-dom报错
    create-react-app 创建react ts项目启动报错
    十进制转二进制、八进制、十六进制(js)
    代码编辑器设置自定义提示
  • 原文地址:https://www.cnblogs.com/Jabben_Yi/p/5571717.html
Copyright © 2011-2022 走看看