外观模式
意图
为子系统种的一组接口提供一个一致的界面,Facade模式定义一个高层的接口,使得这一子系统更容易使用。
适用性
- 为复杂的子系统提供简单接口时;
- 客户程序和抽象类的实现部分存在很大的依赖性;
- 构建层次结构的子系统时,子系统间通过Facade通信,简化依赖关系;
使用场景:如MVC三层架构,在数据访问层和业务逻辑层、业务逻辑层和表示层的层与层之间建立外观Facade,降低耦合
类图
关键代码:在客户端和复杂系统之间再加一层,这一层将调用顺序、依赖关系等处理好。
- Facade:如Compiler
- 知道哪些子系统类处理请求;
- 将客户的请求代理给适当的子系统对象;
- Subsystem classes:如Scanner、Parser、ProgramNode等
- 实现子系统的功能;
- 处理由Facade对象指派的任务;
优缺点
优点: 1、减少系统相互依赖。 2、提高灵活性。 3、提高了安全性。
缺点:
-
不符合开闭原则,如果要改东西很麻烦,继承重写都不合适。
-
不引入抽象外观类的情况下,增加新的子系统需要修改现有代码,不符合开闭原则