定义
要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。
代码实现
子系统:
public class ClassA { public void doSomethingA() { }}public class ClassB { public void doSomethingB() { }}
门面:
public class Facade { private ClassA classA = new ClassA(); private ClassB classB = new ClassB(); //委托方法 public void methodA() { this.classA.doSomethingA(); } //委托方法 public void methodB() { this.classB.doSomethingB(); }}
优点
- 减少系统的相互依赖,松耦合
- 提高灵活性
- 提高安全性
缺点
- 不符合开闭原则,对修改关闭,对扩展开放。
适用场景
- 为一个复杂的模块或者子系统提供一个供外界访问的接口
注意事项
- 一个子系统可以有多个门面
- 门面不参与子系统内的业务逻辑
实践
参考日志模块slf4j, log4j, logback的实现,他就是采用了门面模式。