定义
外观模式提供了一个统一的接口,用来访问子系统中的一群接口。外观模式定义了一个高层接口,让子系统更容易实现。
角色
- 外观(Facade):提供一个外观接口,对外,它提供一个易于客户端访问的接口,对内,它可以访问子系统中的所有功能。
- 子系统(Subsystem):子系统在整个系统中可以是一个或多个模块,每个模块都有若干类组成,这些类可能相互之间有着比较复杂的关系。
类图
实现
1 | public class Facade { |
优缺点
优点
- 减少系统相互依赖
- 提高了灵活性
- 提高了安全性
缺点
- 不符合开闭原则,如果要改东西很麻烦,继承重写都不合适。
适用场景
- 为复杂的模块或子系统提供外界访问的模块
- 子系统相对独立
- 预防低水平人员带来的风险
模式应用
Spring IoC
Spring IoC容器中的ApplicationContext同时实现了多个接口,并通过引用这些接口的实例,对外统一提供:加载配置、解析资源、创建Bean、提供环境、启动流程等功能,客户代码只需要操作context就可以获取spring的提供的功能,而无需关心内部的细节。
1 | public interface ApplicationContext extends EnvironmentCapable, ListableBeanFactory, HierarchicalBeanFactory, |
实际应用
controller、service可以理解为就是门面模式的运用。