外观 (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
Java 示例
Section titled “Java 示例”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 }}外观通过统一入口封装多个子系统的调用,降低客户端复杂度、减少耦合,是常用的“简化接口”手段。