概述
要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。外观模式提供一个高层侧的接口,使得子系统更易使用。
类图
角色
- 外观(Facade)角色:
客户端可以调用该角色的方法,该角色知晓相关子系统的功能和责任。正常情况下,本角色会将所有从客户端发出来的请求委派到相应的子系统,即该角色没有实际的业务逻辑,只是一个委托类。 - 子系统(Subsystem)角色:
可以同时有一个或者多个子系统,每一个子系统都不是一个单独的类,而是一个类的集合。子系统不知道外观角色的存在,对子系统而言,外观角色仅仅是另一个客户端而已。
示例
子系统集合
1 | public class ClassA{ |
Facade.java
1 | public class Facde{ |
应用
优点
- 减少系统的互相依赖,所有依赖都是对Facade对象的依赖,与子系统无关。
- 提高灵活性,不管子系统内部如何变化,只要不影响Facade对象,任何活动都是自由的。
- 提高安全性,Facade中未提供的方法,外界就无法访问,提高系统的安全性。
场景
- 为一个复杂的模块或子系统提供一个供外界访问的接口。
- 子系统相对独立,外界对子系统的访问需要黑箱操作即可。
- 预防风险扩散,使用Facade进行访问操作控制。