Facade pattern,结构型模式,它为子系统的众多接口提供了统一的高层接口,使子系统更容易使用。
对于以下5个接口:
image.png
将其组合成满足需求的组合接口提供给调用者使用:
image.png
这样保证了底层接口的细粒度。

定义

要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。门面模式(Facade 模式)提供一个高层次的接口,使得子系统更易于使用。

To make a complex subsystem easier to use, a simple interface should be provided for a set of interfaces in the subsystem.

为了使复杂的子系统更容易被使用,应当为子系统的众多接口提供一个简洁的高层接口。
image.png

使用场景

为一个复杂子系统提供一个简单接口;
当你需要构建一个层次结构的子系统时,使用Facade模式定义子系统中每层的入口点。

实际工作中,比如维护一段祖传代码的时候,我们会为原本凌乱的业务逻辑整合出一个新的接口,此外,在构建新项目的时候,我们同样可以考虑增加“外观层”,这样即保持了底层功能的细粒度,也为调用者提供了方便。

Android 中 context 就是一个高度封装的产物

总结

封装。通过一个高层次结构为用户提供统一的API入口,使得用户通过一个类型就基本能够操作整个系统,这样减少了用户的使用成本,也能够提升系统的灵活性。

优点

  • 对客户程序隐藏子系统细节,因而减少了客户对于子系统的耦合,能够拥抱变化。
  • 外观类对子系统的接口封装,使得系统更易与使用。

    缺点

  • 外观类接口膨胀。

  • 外观类没有遵循开闭原则,当业务出现变更时,可能需要直接修改外观类。

实现了迪米特原则,违背了开闭原则

参考

漫画:设计模式之 “外观模式”