前言
外观模式(Facade),提供一个高层次的接口,隐藏系统的复杂性,使得子系统更易于使用。
具体实现
子系统类 :
public class SubSystemA {
public void methodA(){
System.out.println("执行子系统方法A");
}
}
public class SubSystemB {
public void methodB(){
System.out.println("执行子系统方法B");
}
}
public class SubSystemC {
public void methodC(){
System.out.println("执行子系统方法C");
}
}
外观类:
public class Facade {
private final SubSystemA subSystemA;
private final SubSystemB subSystemB;
private final SubSystemC subSystemC;
public Facade(){
subSystemA = new SubSystemA();
subSystemB = new SubSystemB();
subSystemC = new SubSystemC();
}
public void method(){
subSystemA.methodA();
subSystemB.methodB();
subSystemC.methodC();
}
}
@SpringBootTest
class FacadeDemoApplicationTests {
@Test
void contextLoads() {
Facade facade = new Facade();
facade.method();
}
}
优缺点
优点
- 降低了客户端与子系统的耦合关系。
- 让子系统更加易用,客户端不再需要了解子系统内部的实现。
- 提高了安全性,例如有些方法是对系统外的,有些方法是系统内部使用的,把需要暴露给外部的功能集中到外观中,这样既方便客户端使用,也很好地隐藏了内部的细节。
缺点
- 不符合“开闭原则”,新增子系统时需要修改外观类。
源码