跳转至

外观模式

意图

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

适用性

  • 为复杂的子系统提供简单接口时;
  • 客户程序和抽象类的实现部分存在很大的依赖性;
  • 构建层次结构的子系统时,子系统间通过Facade通信,简化依赖关系

使用场景:如MVC三层架构,在数据访问层和业务逻辑层、业务逻辑层和表示层的层与层之间建立外观Facade,降低耦合

类图

关键代码:在客户端和复杂系统之间再加一层,这一层将调用顺序、依赖关系等处理好。

img

  • Facade:如Compiler
  • 知道哪些子系统类处理请求;
  • 将客户的请求代理给适当的子系统对象;
  • Subsystem classes:如Scanner、Parser、ProgramNode等
  • 实现子系统的功能;
  • 处理由Facade对象指派的任务;

优缺点

优点: 1、减少系统相互依赖。 2、提高灵活性。 3、提高了安全性。

缺点:

  • 不符合开闭原则,如果要改东西很麻烦,继承重写都不合适。

  • 不引入抽象外观类的情况下,增加新的子系统需要修改现有代码,不符合开闭原则