发布时间:2026/9/4 18:53:16
谈谈你了解的最常见的几种设计模式,说说他们的应用场景 常见设计模式 应用场景面试Markdown后端面试高频设计模式分三大类创建型、结构型、行为型挑开发中最常用的来讲结合业务Spring源码场景。一、创建型模式负责对象的创建1. 单例模式作用保证一个类全局只有一个实例提供全局访问点。场景工具类、配置管理器、线程池、数据库连接池Spring中默认Bean就是单例实现饿汉、DCL双重检查锁、静态内部类、枚举单例防反射序列化2. 工厂模式简单工厂、工厂方法、抽象工厂1简单工厂一个工厂类根据参数创建不同对象。缺点新增产品要修改工厂代码违反开闭原则。场景简单对象创建业务变化不大。2工厂方法一个产品对应一个工厂每个工厂只生产一种产品。场景产品经常新增比如多种消息发送短信、邮件、站内信。3抽象工厂生产一组相关对象。场景整套组件比如不同操作系统的按钮、输入框组件。Spring BeanFactory就是工厂模式的体现。3. 建造者模式作用分步构建复杂对象隔离对象构建和表示同样构建过程可以产出不同对象。场景对象属性多构造函数参数爆炸比如Builder构建实体、DTO例子MyBatis中SqlSessionFactoryBuilderLombok的Builder注解。二、结构型模式类/对象组合组装成更大结构1. 代理模式分为静态代理、动态代理(JDK动态代理、CGLIB)作用给目标对象提供代理对象在不修改原有代码前提下做增强。场景AOP切面、日志、权限校验、事务控制、埋点统计Spring AOP底层就是动态代理。JDK代理基于接口CGLIB继承子类实现。2. 装饰器模式作用动态给对象增加额外功能比继承更灵活。场景IO流BufferedInputStream包装原始流给原有对象叠加额外能力不改动原有类。3. 适配器模式作用把一个类的接口转换成客户端期望的另一个接口做兼容适配。场景接入第三方接口第三方返回格式和我们系统不匹配写适配器做转换SpringMVCHandlerAdapter适配不同处理器。4. 组合模式作用树形结构统一对待叶子节点和容器节点。场景菜单树、部门组织树、文件目录。三、行为型模式对象之间通信、算法、流程控制1. 策略模式作用把多种算法抽成策略接口实现运行时动态替换消灭大量if‑else。场景多种支付方式、多种折扣算法、多种导出方式。Spring大量使用比如Comparator。2. 模板方法模式作用父类定义固定流程骨架可变步骤交给子类实现final保证流程不被篡改基于继承。场景流程固定部分步骤不同文件导入导出任务。SpringJdbcTemplate就是典型模板方法。3. 观察者模式发布‑订阅作用一对多主题变化所有订阅者自动收到通知。场景事件通知、消息推送、事件监听。Spring事件机制、MQ思想GUI事件监听。4. 责任链模式作用多个处理者组成链条请求沿着链条依次处理可以传递或者终止。场景过滤器、拦截器、权限校验链、审批流程。SpringMVCFilter、InterceptorMyBatis插件链。5. 迭代器模式作用统一遍历集合对外隐藏底层集合结构。场景Java集合的Iterator迭代器。6. 命令模式把请求封装成对象可以保存、排队、撤销。场景任务队列、撤销重做操作。面试口述总结可以直接背我平时接触比较多的分为创建、结构、行为三类。创建型最常用单例、工厂、建造者主要解决对象创建问题单例保证全局唯一实例工厂封装对象创建逻辑建造者用于构建复杂多属性对象。结构型常用代理、适配器、装饰器代理用于功能增强SpringAOP就是动态代理适配器用来兼容不同接口装饰器动态扩展对象能力。行为型里面策略、模板方法、责任链、观察者用得最多。策略模式用来消除if‑else动态切换算法模板方法父类固定流程骨架子类实现可变步骤责任链适合一层层校验处理观察者实现事件的发布订阅解耦。很多设计模式在Spring、MyBatis源码中都有落地。

相关新闻

2026/9/4 18:53:16

Web Audio API声控游戏开发:从音频处理到肺活量测试实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/4 18:48:14

FakeLinux:macOS上运行Linux二进制的兼容层而非发行版

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/4 18:48:14

Unity消融效果Shader实现:动态着色与边缘高亮全解析

怪物溶解、角色被烧成灰烬、物体随时间剥落,这类效果在项目里通常需要一段“消融”过渡来衔接死亡与残留物出现的节奏。之前我带的小组做技能演示时,需求方给的关键词就三个:Unity、动态着色、消融效果。听起来简单,真做起来发现难…

2026/9/4 20:38:29

从零构建PHP图书馆管理系统:数据库设计、事务处理与安全实践

简介:这是一套完整的PHP语言开发的图书馆管理系统网站源码,面向Web开发初学者与中小型项目实践者,解决图书借阅、用户管理、图书检索等核心业务场景的快速搭建需求。资源包含前端页面、后端逻辑及数据库结构,覆盖用户登录、图书增…

2026/9/4 20:38:29

C#点云可视化实战:WinForms+PCL+VTK多视图框架

简介:本资源是一个面向点云可视化开发初学者与中级工程师的C#多视图点云显示基础框架,聚焦解决点云数据在Windows桌面端的高效渲染、多视角交互与可扩展集成问题,适用于自动驾驶标注系统、三维重建工具及工业检测软件等实际场景。压缩包共219…

2026/9/4 20:38:29

Windows磁盘清理全攻略:命令、脚本与开源工具实操

磁盘空间被占满这件事,基本是每个用过 Windows 的人都会撞上的坎。打开资源管理器看到 C 盘变红,不知道从哪里下手;用系统自带的磁盘清理扫了半天,删掉的东西却不多,反而把时间耗进去了。这次我们来看一种更直接的清理…

2026/9/4 20:38:29

为什么给老板的报表千万不能带滚动条:管理层视觉心理学实测

为什么给老板的报表千万不能带滚动条:管理层视觉心理学实测在数据可视化和 BI 看板设计领域,有一个极少被写进教科书、但却决定了无数数据分析师升职加薪与否的隐形铁律:凡是面向管理层和总监级以上汇报的页面,绝对不能出现横向或…

2026/9/4 20:38:29

asyncio 中的 CPU 密集型任务:正确使用 run_in_executor

asyncio 中的 CPU 密集型任务:正确使用 run_in_executor 在 Python 异步开发(asyncio)中,最常见也最致命的架构事故之一就是:在协程主链路中直接执行耗时的 CPU 密集型代码。 很多团队在使用 FastAPI 开发 AI 网关或 …

2026/9/4 20:33:29

快速排序核心机制全拆解:主元、分区与递归边界一次讲透

快速排序大概是很多人第一轮学算法时最痛快、又最心虚的部分。痛快的是动画一放,主元被拎出来,小的往左边丢、大的往右边丢,剩下的交给递归,看起来行云流水;心虚的是,等自己打开编辑器,数组下标…

2026/9/3 18:28:26

vSound小提琴数字处理器实操指南:从接线到演出的完整配置

电小提琴或者原声小提琴插电演出,第一个绕不开的坎就是声音难听。原声琴的共鸣和空气感一旦进了拾音器,出来的往往是一坨干瘪、发尖、带着奇怪塑料味的信号。我当初第一次把琴接上乐队调音台,直接被主唱吐槽"你这声音像在锯钢丝"。…

2026/9/3 14:29:47

传感器接口IC如何攻克生物化学传感的微弱信号难题?

1. 从电极到比特流:为什么生物化学传感必须依赖专用接口IC 做生物化学传感的人都有过类似的经历:明明传感器本身性能很好,信号输出却一塌糊涂——噪声大、漂移明显、重复性差,怎么调都达不到预期。很多时候问题并不在传感器&#…

2026/9/3 14:30:35

STM32F411CEU6多通道ADC采集:扫描模式+DMA实现详解

1. 多通道 ADC 的用武之地把“Multichannel ADC”和“STM32F411CEU6”这两个关键字放在一起,其实就是嵌入式开发里最常遇到的一类需求:用一块不算贵的 MCU,同时采集多路模拟信号。STM32F411CEU6 是 48 引脚的 Cortex-M4F 主控,主频…

2026/9/4 0:00:58

STM32H743 SPI从机DMA双缓冲通信实战

简介:本资源是面向嵌入式开发工程师与STM32进阶学习者的SPI DMA双机通信从机端完整实现方案,聚焦STM32H743高性能Cortex-M7单片机在工业控制与高速数据交互场景下的从机通信开发痛点。压缩包含1355个文件,主体为599个C源码与321个头文件&…

2026/9/4 0:00:58

CPU开盖降温教程:20元成本让温度直降30度的原理与实践

最近很多朋友都在抱怨,自己的电脑一到夏天就变成"烤箱",玩游戏时CPU温度动不动就飙到90度以上,风扇噪音堪比直升机。更让人头疼的是,明明配置不错,却因为高温降频导致性能大打折扣。如果你也遇到了类似问题&…

2026/9/4 0:00:58

ArkTS 表单工程:场地预约页的三态场次 Grid 与校验

ArkTS 表单工程:场地预约页的三态场次 Grid 与校验 App 14「运动场地预约」场地 Tab(Func1Tab),是整 App 交互最丰富的页面——场地横向切换 三色图例 渐变预约预览卡 快捷模板 今日场次 Grid(可选/已选/已满三态&…

2026/9/3 20:43:36

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/3 17:51:43

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/3 21:06:57

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…