外观模式
定义
外观模式又叫门面模式,是一种通过为多个复杂子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口,外部应用程序不用关心内部子系统的具体细节,这样会大大降低应用程序的复杂度,提高程序的可维护性。
结构
外观模式包含以下主要角色:
- 外观角色: 为多个子系统提供一个共同的接口。
- 子系统角色: 实现系统的部分功能,客户可以通过外观角色访问它。
- 客户角色: 通过一个外观角色访问各个子系统的功能。
适用场景
- 子系统越来越复杂,增加外观模式提供简单调用接口。
- 构建多层系统结构,利用外观对象作为每层的入口,简化层间调用。
优点和缺点
优点
- 简化了调用过程,无需深入了解子系统,防止带来风险。
- 减少系统依赖、松散耦合。
- 更好的划分访问层次。
- 符合迪米特法则,即最少知道原则。
缺点
- 增加子系统、扩展子系统行为容易引入风险。
- 不符合开闭原则。
代码实现
假设我们现在有三个系统,SubSystem01
、SubSystem02
、SubSystem03
,每个系统里面都有各自的逻辑处理方法;
我们现在有一个需求,需要调用三个系统联合去处理一个业务,那么就需要分别创建出SubSystem01
、SubSystem02
、SubSystem03
系统的实例,然后调用对应的方法执行业务逻辑,
如果对象的创建,或者需要调用的方法很繁琐,那么每次处理逻辑,都要进行这块调用的处理,就很麻烦;
所以我们可以将这几个系统作为子系统,然后以一个高层系统(外观角色)进行封装,对外暴露一个相对简单的接口。
子系统1:
1 | public class SubSystem01 { |
子系统2:
1 | public class SubSystem02 { |
子系统3:
1 | public class SubSystem03 { |
外观角色:
1 | public class Facade { |
调用:
1 | public class Test { |
结果:
1 | 子系统01的method1方法被调用 |