结构型设计模式的一种

【DP】定义

为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

使用场景

  1. 对旧系统复用时,如果接口很多很乱,可以使用外观模式对接口进行简化
  2. 系统演化过程中,出现很多很小的类,对外暴露的接口繁杂,此时可以使用外观模式
  3. 设计之初,对不同逻辑层的接口之间使用外观模式,如DAO层的接口很多,可以使用外观模式使接口更加清晰

类图

外观模式

Facade归纳总结子系统中的方法,使用更简洁的方法提供给客户端调用。

举例

报表有两个接口,分别用于获取格式态报表和查询数据,如下:

1
2
3
4
5
6
7
public interface IFormatReport {
FormatModel getFormatModel();
}

public interface IQueryReport {
ReportModel queryReport(FormatModel format);
}

但是在客户端调用时只需要最终的查询结果就可以了,因此可以使用外观模式简化接口如下:

1
2
3
4
5
6
7
8
public class Facade {
public ReportModel queryReport() {
IFormatReport formatReportSrv = new 实例类();
IQueryReport queryReportSrv = new 实例类();
FormatReport format = formatReportSrv.getFormatModel;
return queryReportSrv.queryReport(format);
}
}

这样客户端只需要知道Facade.queryReport就可以了。

注意事项

盲目使用会增加类的个数,导致维护困难。