跳至正文
来两杯美式
返回

设计模式之外观模式:统一门面,简化子系统调用

By 来两杯美式
发布于

这是 2020 年 5 月整理的设计模式专题第八篇。外观模式又叫门面模式,是”化繁为简”的代表——把一堆复杂的子系统接口,收敛成一个简单统一的入口。就像前台:你只需要跟前台说需求,不用自己去对接各个部门。

简单说明

外观模式(Facade Pattern),又叫门面模式:提供一个统一的接口,来访问子系统的一群接口

客户端 ──> 外观对象(Facade)──> 子系统A
                  │            ├─> 子系统B
                  │            └─> 子系统C
       (客户端只依赖门面,不直接接触子系统)

实现

将子系统各种接口聚合,对外展示 Facade 对象:

/**
 * 描述:子系统:订单系统
 */
public class OrderService {
    public void createOrder() {
        System.out.println("创建订单");
    }
}

/**
 * 描述:子系统:库存系统
 */
public class StockService {
    public void deductStock() {
        System.out.println("扣减库存");
    }
}

/**
 * 描述:子系统:支付系统
 */
public class PayService {
    public void pay() {
        System.out.println("完成支付");
    }
}

/**
 * 描述:外观对象:聚合所有子系统,对外提供一个简单入口
 */
public class OrderFacade {
    private OrderService orderService = new OrderService();
    private StockService stockService = new StockService();
    private PayService payService = new PayService();

    // 一键下单:客户端只调这一个方法
    public void placeOrder() {
        orderService.createOrder();
        stockService.deductStock();
        payService.pay();
    }
}

/**
 * 描述:客户端
 */
public class Client {
    public static void main(String[] args) {
        // 客户端完全不需要知道 OrderService/StockService/PayService 的存在
        OrderFacade facade = new OrderFacade();
        facade.placeOrder();
    }
}

角色:子系统(OrderService/StockService/PayService)+ 外观(OrderFacade)。客户端只依赖外观,不直接接触子系统。

优点与缺点

优点

缺点

外观模式对”调用方”友好,但对”扩展方”不友好——门面把复杂收敛了,代价是门面自身成为修改的集中点。

适用场景

外观 vs 适配器

对比项外观模式适配器模式
目的简化子系统访问,提供统一入口转换接口,让不兼容的接口协同
面向面向子系统(多个)面向单个接口
核心化繁为简桥接不匹配

小结


分享这篇文章:
通过邮件分享这篇文章✓ 链接已复制
查看系列全部文章
  1. 01.软件设计原则:SOLID + KISS / YAGNI / LOD 全景
  2. 02.设计模式之原型模式,及深浅拷贝
  3. 03.设计模式之工厂模式:简单工厂、工厂方法与抽象工厂
  4. 04.设计模式之建造者模式:复杂对象的组装艺术
  5. 05.设计模式之适配器模式:让不兼容的接口协同工作
  6. 06.设计模式之桥接模式:抽象与实现分离,各自独立变化
  7. 07.设计模式之装饰者模式:动态增强,比继承更有弹性
  8. 08.设计模式之代理模式:静态代理与 JDK 动态代理
  9. 09.设计模式之外观模式:统一门面,简化子系统调用
  10. 10.设计模式之享元模式:共享细粒度对象,降低内存占用
  11. 11.设计模式之策略模式:算法家族,自由切换
  12. 12.设计模式之模板方法模式:固定骨架,可变步骤
  13. 13.设计模式之观察者模式:一对多依赖,状态变更自动通知
  14. 14.设计模式之责任链模式:请求逐级传递,动态组合处理者
  15. 15.设计模式之状态模式:状态变,行为变
  16. 16.设计模式之迭代器模式:不暴露内部实现,顺序访问集合

上一篇
DDD 复杂业务系统设计(十):从战略到微服务,一张图跑通 DDD+中台+微服务
下一篇
DDD 复杂业务系统设计(九):中台,在线教育平台到底应该共享什么