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