zoukankan      html  css  js  c++  java
  • 设计模式第八篇-外观模式

    一、引言

    电商项目中一个常见场景:提交订单操作,提交订单后有很多后续动作,例如:检查订单, 创建订单, 减库存,创建支付链接等等,这些子类的内部操作都很复杂。如果我们的客户端程序要直接跟这些内容子系统进行耦合,那么客户端就得随着子系统的改动而改动。提交订单操作在一个电商系统中很多地方都会出现,如果每个地方都进行了耦合,那一旦进行改动是非常苦难的。

    这个时候我们需要一个高级接口,将子系统包装起来,提供一个客户端可以访问系统的接口,将内部系统的复杂性隐藏起来,这就是外观模式。

    二、外观模式

    定义:外观模式提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。

    主要解决:降低访问复杂系统的内部子系统时的复杂度,简化客户端与之的接口。

    何时使用: 1、客户端不需要知道系统内部的复杂联系,整个系统只需提供一个"接待员"即可。 2、定义系统的入口。

    如何解决:客户端不与系统耦合,外观类与系统耦合。

    类图:

    三、代码实现

    //检查订单
    public class CheckOrder {
        public void check() {
            System.out.println("检查订单...");
        }
    }
    //创建订单
    public class AddOrder {
        public void add(){
            System.out.println("新增订单...");
        }
    }
    //减库存
    public class SubInventory {
        public void sub(){
            System.out.println("减去库存...");
        }
    }
    //下单外观类
    public class OrderFacade {
        private AddOrder addOrder;
        private CheckOrder checkOrder;
        private SubInventory subInventory;
    
        public OrderFacade(){
            addOrder=new AddOrder();
            checkOrder=new CheckOrder();
            subInventory=new SubInventory();
        }
        //入口方法
        public void order(){
            checkOrder.check();
            addOrder.add();
            subInventory.sub();
        }
    }

    结果:

    四、总结

    优点: 1、减少系统相互依赖。 2、提高灵活性。 3、提高了安全性。

    缺点:不符合开闭原则,如果要改东西很麻烦,继承重写都不合适。

    使用场景: 1、为复杂的模块或子系统提供外界访问的模块。 2、子系统相对独立。 3、预防低水平人员带来的风险。

    注意事项:在层次化结构中,可以使用外观模式定义系统中每一层的入口

  • 相关阅读:
    iOS SpriteKit 字体设置无效问题
    2021又来到了!
    其他人员优点
    自己缺点记录
    领导优点分析-于总
    领导优点分析-黄总
    Linux CentOS 7 安装字体库 & 中文字体
    mysql备份数据库
    MySQL mysqldump 导入/导出 结构&数据&存储过程&函数&事件&触发器
    mysql 导入导出数据库以及函数、存储过程的介绍
  • 原文地址:https://www.cnblogs.com/yuanqinnan/p/10271538.html
Copyright © 2011-2022 走看看