门面模式 - 结构型

门面模式已被称为外观模式

一、门面模式的原理
1.门面模式的定义:为子系统提供一组统一的接口,定义一组高层接口让“子系统更易用”。
2.举例说明:
假设有一个系统 A,提供了 a、b、c、d 四个接口。系统 B 完成某个业务功能,需要调用 A 系统的 a、b、d 接口。利用门面模式,我们提供一个包裹 a、b、d 接口调用的门面接口 x,给系统 B 直接使用。

二、门面模式的应用场景
1.解决易用性问题
门面模式可以用来封装系统的底层实现,隐藏系统的复杂性,提供一组更加简单易用、更高层的接口。
举例说明:
a.Linux 系统调用函数就可以看作一种“门面”。它是 Linux 操作系统暴露给开发者的一组“特殊”的编程接口,它封装了底层更基础的 Linux 内核调用。
b.Linux 的 Shell 命令,实际上也可以看作一种门面模式的应用。它继续封装系统调用,提供更加友好、简单的命令,让我们可以直接通过执行命令来跟操作系统交互。

  1. 解决性能问题
    假设我们刚刚提到的系统 A 是一个后端服务器,系统 B 是 App 客户端。App 客户端通过后端服务器提供的接口来获取数据。我们知道,App 和服务器之间是通过移动网络通信的,网络通信耗时比较多,为了提高 App 的响应速度,我们要尽量减少 App 与服务器之间的网络通信次数。

3.解决分布式事务问题
在一个金融系统中,有两个业务领域模型,用户和钱包。这两个业务领域模型都对外暴露了一系列接口,比如用户的增删改查接口、钱包的增删改查接口。假设有这样一个业务场景:在用户注册的时候,我们不仅会创建用户(在数据库 User 表中),还会给用户创建一个钱包(在数据库的 Wallet 表中)。创建用户和钱包的两个操作,要么都成功,要么都失败,不能一个成功、一个失败。
最简单的解决方案是,利用数据库事务或者 Spring 框架提供的事务(如果是 Java 语言的话),在一个事务中,执行创建用户和创建钱包这两个 SQL 操作。这就要求两个 SQL 操作要在一个接口中完成,所以,我们可以借鉴门面模式的思想。

三、思考题
1.适配器模式和门面模式的相同点和不同点?
相同点:将不好用的接口适配成好用的接口。
不同点:适配器是做接口转换,解决的是原接口和目标接口不匹配的问题;门面模式做接口整合,解决的是多接口调用带来的问题。

文章参考王争老师的《设计模式之美》。

你可能感兴趣的:(门面模式 - 结构型)