🍛 外观 | 门面模式
2022年6月20日
- 设计模式
🍛 外观 | 门面模式
1. 概述
1) 是什么
- 引入一个外观角色来简化客户端与子系统之间的交互,为复杂的子系统调用提供一个统一的入口
- 可为多个外部接口提供统一访问入口
- 门面系统: 接收外部请求,并将请求转发给适当的子系统进行处理
- 子系统: 表示某个领域内的功能实现、或者具体子接口实现,比如,订单、支付等,专门处理由门面系统指派的任务
- 外部与一个子系统的通信必须通过一个统一的门面对象进行。
- 门面模式提供一个高层次的接口,使得子系统更易于使用。
- 每一个子系统只有一个门面类,而且此门面类只有一个实例,也就是说它是一个单例模式。但整个系统可以有多个门面类。
2) 优点
- 简化复杂系统,提供统一接口规范,对客户端友好,只需要和门面打交道即可
- 复杂的业务逻辑由内部子系统消化,只要对外接口规范不变,外部调用方不需要频繁修改
- 扩展性较好,类似于SPI架构一样,支持水平扩展
3) 缺点
- 过于庞大的外观,会使得该外观称成为上帝对象,造成所有类的耦合,可通过它操作所有的类功能
2. 代码示例
1) 场景 & 目标
- 现在内部有 3 个子系统,分别提供
- 查询学生姓名
- 查询学生班级
- 查询学生成绩
- 现在外部有 2 个系统,分别需要
- 教学系统:学生姓名 & 学生班级
- 考试系统:学生姓名 & 学生成绩
- 之前教学系统需要分别和 2 个系统打交道,考试系统同理,
- 现在希望教学系统 & 考试系统均通过同一个门面系统入口进入,跟这个门面系统请求想要获取的资源,不需要知道里面到底经过了多少子系统
2) 代码示例
3. 应用
1) JPA
- JPA提供了统一Java持久层API,底层适配多样化的存储系统