🍛 外观 | 门面模式

吞佛童子2022年6月20日
  • 设计模式
  • 结构型
  • 外观模式
  • 门面模式
大约 3 分钟

🍛 外观 | 门面模式

1. 概述

1) 是什么

  • 引入一个外观角色来简化客户端与子系统之间的交互,为复杂的子系统调用提供一个统一的入口
  • 可为多个外部接口提供统一访问入口
  • 门面系统: 接收外部请求,并将请求转发给适当的子系统进行处理
  • 子系统: 表示某个领域内的功能实现、或者具体子接口实现,比如,订单、支付等,专门处理由门面系统指派的任务
  • 外部与一个子系统的通信必须通过一个统一的门面对象进行。
  • 门面模式提供一个高层次的接口,使得子系统更易于使用。
  • 每一个子系统只有一个门面类,而且此门面类只有一个实例,也就是说它是一个单例模式。但整个系统可以有多个门面类。

2) 优点

  • 简化复杂系统,提供统一接口规范,对客户端友好,只需要和门面打交道即可
  • 复杂的业务逻辑由内部子系统消化,只要对外接口规范不变,外部调用方不需要频繁修改
  • 扩展性较好,类似于SPI架构一样,支持水平扩展

3) 缺点

  • 过于庞大的外观,会使得该外观称成为上帝对象,造成所有类的耦合,可通过它操作所有的类功能

2. 代码示例

1) 场景 & 目标

  1. 现在内部有 3 个子系统,分别提供
  • 查询学生姓名
  • 查询学生班级
  • 查询学生成绩
  1. 现在外部有 2 个系统,分别需要
  • 教学系统:学生姓名 & 学生班级
  • 考试系统:学生姓名 & 学生成绩
  1. 之前教学系统需要分别和 2 个系统打交道,考试系统同理,
  2. 现在希望教学系统 & 考试系统均通过同一个门面系统入口进入,跟这个门面系统请求想要获取的资源,不需要知道里面到底经过了多少子系统

2) 代码示例


3. 应用

1) JPA

  • JPA提供了统一Java持久层API,底层适配多样化的存储系统
上次编辑于: 2022/6/20 下午8:24:47
贡献者: liuxianzhishou