外观模式(Facade Pattern)是一种结构型设计模式,它的主要目的是为子系统中的一组接口提供一个统一的、更高级别的接口。这个高级接口使得子系统的使用变得更加简单,并且隐藏了子系统内部的复杂性。
代码结构图:
外观模式代码示例:
/**
* 系统类
*/
public class SubSystem {
static class SubSystemOne{
public void methodOne(){
System.out.println("子系统方法1");
}
}
static class SubSystemTwo{
public void methodTwo(){
System.out.println("子系统方法2");
}
}
static class SubSystemThree{
public void methodThree(){
System.out.println("子系统方法3");
}
}
static class SubSystemFour{
public void methodFour(){
System.out.println("子系统方法4");
}
}
}
/**
* 外观类
*/
public class Facade {
private SubSystem.SubSystemOne subSystemOne;
private SubSystem.SubSystemTwo subSystemTwo;
private SubSystem.SubSystemThree subSystemThree;
private SubSystem.SubSystemFour subSystemFour;
public Facade() {
subSystemOne = new SubSystem.SubSystemOne();
subSystemTwo = new SubSystem.SubSystemTwo();
subSystemThree = new SubSystem.SubSystemThree();
subSystemFour = new SubSystem.SubSystemFour();
}
public void methodA(){
subSystemOne.methodOne();
subSystemTwo.methodTwo();
subSystemThree.methodThree();
subSystemFour.methodFour();
}
public void methodB(){
subSystemOne.methodOne();
subSystemFour.methodFour();
}
}
/**
* 外观模式客户端
*/
public class AppearanceDemo {
public static void main(String[] args) {
// 创建外观类
Facade facade = new Facade();
// 调用封装好的系统方法A
facade.methodA();
System.out.println("=== === === ===");
// 调用封装好的系统方法B
facade.methodB();
}
}
实际应用场景:
save()
、update()
、delete()
和find()
等简单易用的方法,而这些方法内部调用了复杂的SQL查询、事务管理、连接池操作等子系统的功能。sendRequest()
、downloadFile()
,而内部则处理了网络连接建立、数据序列化/反序列化、错误处理等多种复杂的步骤。骤。
6. 分布式服务调用: 在微服务架构中,可以创建一个服务网关,它作为一个统一的服务调用入口,负责转发客户端的请求到后端不同的微服务,并合并返回结果,从而简化客户端调用多个服务接口的复杂性