外观模式(Facade Pattern)是一种
结构型设计模式
,它提供了一个统一的接口
,用于访问一组接口的功能。通过外观模式,客户端可以简化与复杂子系统的交互,只需要与外观对象进行交互。
1 结构图
2 代码展示
首先,我们有一个复杂的子系统,它包含多个类和接口:
// 子系统中的类
class SystemA {
public void operationA() {
System.out.println("SystemA methodA");
}
}
class SystemB {
public void operationB() {
System.out.println("SystemB methodB");
}
}
class SystemC {
public void operationC() {
System.out.println("SystemC methodC");
}
}
然后,我们创建一个外观类,它将子系统的功能进行封装:
// 外观类
class Facade {
private SystemA subSystemA;
private SystemB subSystemB;
private SystemC subSystemC;
public Facade() {
subSystemA = new SystemA();
subSystemB = new SystemB();
subSystemC = new SystemC();
}
public void wrapOperation() {
subSystemA.operationA();
subSystemB.operationB();
subSystemC.operationC();
}
}
最后,我们可以在客户端代码中使用外观类:
public class Client {
public static void main(String[] args) {
Facade facade = new Facade();
facade.wrapOperation();
}
}
输出结果将是:
3 总结
在以下情况下可以使用外观模式:
- 当要为一个复杂子系统提供一个简单接口时可以使用外观模式。该接口可以满足大多数用户的需求,而且用户也可以越过外观类直接访问子系统。
- 客户程序与多个子系统之间存在很大的依赖性。引入外观类将子系统与客户以及其他子系统解耦,可以
提高子系统的独立性和可移植性
。 - 在层次化结构中,可以使用外观模式定义系统中每一层的入口,层与层之间不直接产生联系,而
通过外观类建立联系,降低层之间的耦合度
。