外观模式 Facade
外观模式是开发过程中经常不经意间就用到的模式. 当我们编写一个功能相对复杂的模块时, 要对外提供一个简单的调用接口, 就用到了外观模式.
外观模式的核心价值就是对外提供简单易用的接口, 屏蔽内部复杂的逻辑, 协调多个子系统之间的交互顺序和依赖关系.
多个子系统之间是相互独立, 外观模式只是协调它们之间的关系, 不对子系统进行管理.
外观模式是通过外观层, 将使用端与诸多子系统完全隔离, 使用端不能直接调用子系统.
简单使用示例如下:
java
// 外观类:对外提供统一接口,协调子系统
class LogFacade {
// 持有子系统的引用(可按需创建或注入)
private FileWriter fileWriter;
private Encryptor encryptor;
private Compressor compressor;
private Backupper backupper;
public LogFacade() {
this.fileWriter = new FileWriter();
this.encryptor = new Encryptor();
this.compressor = new Compressor();
this.backupper = new Backupper();
}
// 对外提供的简单接口:记录日志(内部协调子系统的一系列操作)
public void recordLog(String content) {
// 1. 加密日志内容
String encryptedContent = encryptor.encrypt(content);
// 2. 写入文件
fileWriter.write(encryptedContent);
// 3. 压缩日志文件
compressor.compress();
// 4. 备份日志文件
backupper.backup();
System.out.println("日志记录完成!");
}
}
// 子系统1:日志写入文件
class FileWriter {
public void write(String content) {
System.out.println("将加密后的日志写入文件:" + content);
}
}
// 子系统2:日志加密
class Encryptor {
public String encrypt(String content) {
// 模拟加密逻辑
return "encrypted_" + content;
}
}
// 子系统3:日志压缩
class Compressor {
public void compress() {
System.out.println("压缩日志文件");
}
}
// 子系统4:日志备份
class Backupper {
public void backup() {
System.out.println("备份日志文件到服务器");
}
}
客户端调用示例:
java
public class FacadePattern {
public static void main(String[] args) {
// 客户端只与外观类交互,无需关心内部子系统
LogFacade logFacade = new LogFacade();
logFacade.recordLog("用户登录成功:admin");
}
}
运行结果:
将加密后的日志写入文件:encrypted_用户登录成功:admin
压缩日志文件
备份日志文件到服务器
日志记录完成!