跳转到内容

外观 (Facade)

外观 (Facade) 是一种结构型设计模式,为多个复杂的子系统提供一个一致的(高层)接口,使这些子系统更加容易被访问。客户端只与外观交互,无需直接面对多个子系统的细节。

  • 系统由多个子系统组成,客户端若直接调用各个子系统,会耦合大量类、调用顺序复杂且易错。
  • 希望简化调用方:一次调用完成一组相关操作。
  • 引入外观类 (Facade):封装对多个子系统的调用,对外提供少量、语义清晰的方法(如 doSomething())。
  • 外观内部按正确顺序调用子系统 A、B、C… 客户端只依赖外观,不直接依赖子系统。
  • 子系统类之间仍可相互调用;外观只是“门面”,不替代子系统逻辑。
classDiagram
    class Facade {
        -subSystemA SubSystemA
        -subSystemB SubSystemB
        +operation() void
    }
    class SubSystemA {
        +operationA() void
    }
    class SubSystemB {
        +operationB() void
    }
    class Client
    Facade o-- SubSystemA
    Facade o-- SubSystemB
    Client ..> Facade : uses
public class SubSystemA {
public void operationA() {
System.out.println("SubSystemA.operationA");
}
}
public class SubSystemB {
public void operationB() {
System.out.println("SubSystemB.operationB");
}
}
public class Facade {
private final SubSystemA subSystemA = new SubSystemA();
private final SubSystemB subSystemB = new SubSystemB();
public void operation() {
subSystemA.operationA();
subSystemB.operationB();
}
}
// 客户端
public class Client {
public static void main(String[] args) {
Facade facade = new Facade();
facade.operation();
// 输出: SubSystemA.operationA / SubSystemB.operationB
}
}

外观通过统一入口封装多个子系统的调用,降低客户端复杂度、减少耦合,是常用的“简化接口”手段。