Facade-门面模式 ############### .. note:: provides a simplified interface to a large body of code. Provide a unified interface to a set of interfaces in a subsystem. Facade Pattern defines a higher-level interface that makes the subsystem easier to use.门面模式让子系统更加易用 接口设计的好坏,直接影响到类、模块、系统是否好用。所以,我们要多花点心思在接口设计上。我经常说,完成接口设计,就相当于完成了一半的开发任务。只要接口设计得好,那代码就差不到哪里去。 应用场景 ======== 1. 解决易用性问题:: 封装系统的底层实现,隐藏系统的复杂性,提供一组更加简单易用、更高层的接口。 从隐藏实现复杂性,提供更易用接口这个意图来看, 门面模式有点类似之前讲到的迪米特法则(最少知识原则)和接口隔离原则: 两个有交互的系统,只暴露有限的必要的接口。 还有点类似之前提到封装、抽象的设计思想,提供更抽象的接口,封装底层实现细节。 2. 解决性能问题:: 将多个接口调用替换为一个门面接口调用,减少网络通信成本 3. 解决分布式事务问题:: 支持两个接口调用在一个事务中执行,是比较难实现的,这涉及分布式事务问题 可以通过引入分布式事务框架或者事后补偿的机制来解决,但代码实现都比较复杂 最简单的解决方案是,利用数据库事务在一个事务中,执行两个 SQL 操作 这要求两个 SQL 操作要在一个接口中完成 与适配器模式对比 ================ :: 适配器是做接口转换,解决的是原接口和目标接口不匹配的问题。 门面模式做接口整合,解决的是多接口调用带来的问题。 从场景看: 门面模式适用在接口设计方面,解决多接口调用问题 适配器模式是一种补偿措施,补偿的是接口设计缺陷 从功能看: 门面模式注重易用性 适配器模式注重兼容性