门面模式及其应用
2022-06-08 本文已影响0人
文景大大
一、模式介绍
门面模式又称为外观模式,即提供一个统一的接口或者类,用来访问各个子系统、子模块中的一群接口。在日常开发工作中,但凡只要高层模块需要调用多个子系统,我们都会创建一个新的类来封装这些子系统,以此来提供精简的接口,供高层模块更加容易地间接调用这些子系统的功能。一般而言,各种第三方SDK、开源类库很大概率都是使用门面模式来实现的。
@Slf4j
public class SubSystemA {
public void transactionA(){
log.info("子系统A处理业务");
}
}
@Slf4j
public class SubSystemB {
public void transactionB(){
log.info("子系统B处理业务");
}
}
@Slf4j
public class SubSystemC {
public void transactionC(){
log.info("子系统C处理业务");
}
}
@Slf4j
public class Facade {
private SubSystemA subSystemA = new SubSystemA();
private SubSystemB subSystemB = new SubSystemB();
private SubSystemC subSystemC = new SubSystemC();
public void dealA() {
subSystemA.transactionA();
}
public void dealB() {
subSystemB.transactionB();
}
public void dealC() {
subSystemC.transactionC();
}
public void dealAll(){
subSystemA.transactionA();
subSystemB.transactionB();
subSystemC.transactionC();
}
}
public class Main {
public static void main(String[] args) {
Facade facade = new Facade();
facade.dealA();
}
}
在如上门面模式的通用实现中,Facade类封装了各个子系统的功能,使得客户端不用直接对接各个子系统,只要和门面类交互即可享受各个子系统的服务。
二、使用案例
2.1 Spring JdbcUtils
JdbcUtils封装了对Connection、Statement、ResultSet的操作,是JDBC操作的工具门面类;
三、使用总结
3.1 优点
- 简化调用过程,客户端不用深入了解各个子系统;
- 减少了系统的依赖,降低了耦合,以前客户端需要和各个子系统耦合,现在客户端只要和门面类耦合即可;
- 更好地划分了访问层次,提高了安全性;
- 遵循了迪米特法则,客户端只要知道它应该知道的就行;
3.2 缺点
- 当增加子系统或者扩展子系统时,需要修改门面类,可能带来风险,不符合开闭原则;
- 门面类包含了多个子系统的功能,就像一个集线器一样,违背了单一职责原则;