news 2026/2/8 15:01:59

二十三种设计模式(十)--外观模式

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
二十三种设计模式(十)--外观模式

外观模式 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 压缩日志文件 备份日志文件到服务器 日志记录完成!
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/7 10:41:05

医院病历管理系统信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】

摘要 随着信息技术的快速发展,传统纸质病历管理方式已无法满足现代医院高效、精准的管理需求。纸质病历易丢失、难检索、共享性差等问题日益突出,严重影响了医疗服务的质量和效率。电子病历管理系统通过数字化手段实现了病历信息的集中存储、快速检索和跨…

作者头像 李华
网站建设 2026/2/5 20:31:45

IT精选面试题系列之Java(7)

终于更新了,今天把这个模块更新完,下次更新,下一个模块 1、 Map有什么特点 以键值对存储数据 元素存储循序是无序的不允许出现重复键 2、集合类存放于 Java.util 包中, 主要有几 种接口 主要包含set(集)、 list(列表…

作者头像 李华
网站建设 2026/2/7 17:13:54

10401_基于Springboot的植物园售票管理系统

1、项目包含项目源码、项目文档、数据库脚本、软件工具等资料;带你从零开始部署运行本套系统。2、项目介绍本文设计并实现了一个基于Java的植物园售票系统,旨在通过现代化技术手段提升植物园票务管理的效率与服务质量。该系统针对传统售票方式中存在的效…

作者头像 李华
网站建设 2026/2/7 23:09:52

AI代理的记忆系统全解析:从小白到大模型专家的必学知识!

简介 AI代理的记忆系统包括短期(工作记忆)、长期、情景和语义记忆等类型,各有其功能与优势。检索机制确保代理获取正确信息,记忆系统还用于规划多任务处理、经验回放和持续更新。记忆使AI能够保留信息、随时间推理、根据过去交互改进决策,避免…

作者头像 李华
网站建设 2026/2/5 23:25:54

电商项目中MyBatis反射异常实战解决

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 构建一个电商订单管理模块,模拟以下场景:1. 订单实体包含嵌套的User对象 2. 数据库设计使用下划线命名 3. 故意设置字段映射错误 4. 演示AI辅助诊断过程 5. …

作者头像 李华
网站建设 2026/2/4 19:15:13

豆包大模型api注册

注册账号 进入官网火山引擎,注册一个自己的账号,并完成实名认证,如果有直接登录: https://www.volcengine.com/我选的是个人选模型 创建key https://console.volcengine.com/ark/region:arkcn-beijing/model?vendorBytedance&am…

作者头像 李华