跳到主要内容

09 门面(外观)模式(Facade Design Pattern)

假设你必须在代码中使用某个复杂的库或框架中的众多对象。 正常情况下, 你需要负责所有对象的初始化工作、 管理其依赖关系并按正确的顺序执行方法等。

最终, 程序中类的业务逻辑将与第三方类的实现细节紧密耦合, 使得理解和维护代码的工作很难进行。


门面模式:顾名思义,给一个软件系统提供一个统一大门入口。 即为子系统提供一组统一的访问接口,使得子系统更易用。

使用场景

  1. 解决易用性问题,封装系统的底层实现,隐藏系统的复杂性。提供一组简单易用,高层接口;
  2. 解决性能问题,减少多次交互中的网络请求问题;
  3. 解决分布式问题,避免多次调用产生的事务,在同一个进程的事务中解决。

1. 应用

SLF4J 日志框架的实现,SLF4J 的全称是 The Simple Logging Facade Java。其就是典型的门面(外观)模式的应用。

1.1 优点

设计模式的作用几乎都是为了解耦合,让自己的系统代码独立于复杂的子系统。

1.2 缺点

既然是封装了子系统的交互,那自己的系统代码中所有和三方接口交互的地方都要用到外观接口 ==> 外观模式的类和程序所有类都耦合的“上帝对象”。

2. 实现分析

设想一个这样的场景:上网购物时,我们可能需要依次执行完以下流程:

选择商品 -> 支付 -> 供货商 -> 仓库 -> 包装 -> 送货。

通过购物 APP 提供一个统一的入口,即可以无感完成上面操作,便利生活。