定义 要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。门面模式提供
一个高层次的接口,使得子系统更易于使用
类图
通用代码
//子系统
public class ClassA {
public void doSomethingA(){
//业务逻辑
}
}
public class ClassB {
public void doSomethingB() {
// 业务逻辑
}
}
public class ClassC {
public void doSomethingC() {
// 业务逻辑
}
}
//门面对象
public class Facade {
//被委托的对象
private ClassA a = new ClassA();
private ClassB b = new ClassB();
private ClassC c = new ClassC();
//提供给外部访问的方法
public void methodA(){
this.a.doSomethingA();
}
public void methodB(){
this.b.doSomethingB();
}
public void methodC(){
this.c.doSomethingC();
}
}
优点
1. 减少系统的相互依赖。所有的依赖都是对门面对象的依赖,与子系统无关。
2. 提高了灵活性。不管子系统内部如何变化,只要不影响门面对象,任你自由活动
缺点 不符合开闭原则:对修改关闭,对扩展开放
使用场景
1. 为一个复杂的模块或子系统提供一个供外界访问的接口
2. 子系统相对独立——外界对子系统的访问只是黑箱操作即可
3. 预防低水平人员带来的风险扩散