news 2026/5/28 12:56:36

15-设计模式总结

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
15-设计模式总结

Spring Boot 设计模式总结

概述

Spring Boot 在设计和实现过程中大量运用了经典的设计模式,这些模式使得框架具有高度的可扩展性、可维护性和灵活性。本文将系统总结 Spring Boot 中使用的主要设计模式。


一、创建型模式

1.1 工厂模式(Factory Pattern)

应用场景

Spring Boot 使用工厂模式创建不同类型的对象,根据条件动态决定创建哪种具体实现。

代码示例
// ApplicationContextFactory - 根据Web类型创建不同的应用上下文@FunctionalInterfacepublicinterfaceApplicationContextFactory{ConfigurableApplicationContextapply(WebApplicationTypewebApplicationType);ApplicationContextFactoryDEFAULT=(webApplicationType)->{try{returnswitch(webApplicationType){caseSERVLET->newAnnotationConfigServletWebServerApplicationContext();caseREACTIVE->newAnnotationConfigReactiveWebServerApplicationContext();default->newAnnotationConfigApplicationContext();};}catch(Exceptionex){thrownewIllegalStateException(...);}};}// WebServerFactory - 创建不同的嵌入式容器publicinterfaceWebServerFactory{WebServergetWebServer(ServletContextInitializer...initializers);}publicclassTomcatServletWebServerFactoryimplementsWebServerFactory{@OverridepublicWebServergetWebServer(ServletContextInitializer...initializers){Tomcattomcat=newTomcat();// 配置TomcatreturnnewTomcatWebServer(tomcat);}}
优点
  • 解耦: 将对象创建与使用分离
  • 扩展性: 易于添加新的产品类型
  • 统一接口: 通过统一接口创建对象
缺点
  • 增加系统复杂度
  • 需要额外的工厂类

1.2 建造者模式(Builder Pattern)

应用场景

用于构建复杂的配置对象,如 SpringApplication、各种 Properties 对象等。

代码示例
// SpringApplicationBuilderpublicclassSpringApplicationBuilder{privatefinalSpringApplicationapplication;privateConfigurableApplicationContextcontext;publicSpringApplicationBuilder(Class<?>...sources){this.application=newSpringApplication(sources);}publicSpringApplicationBuilderbannerMode(Banner.ModebannerMode){this.application.setBannerMode(bannerMode);returnthis;}publicSpringApplicationBuilderweb(WebApplicationTypewebApplicationType){this.application.setWebApplicationType(webApplicationType);returnthis;}publicSpringApplicationBuilderprofiles(String...profiles){this.application.setAdditionalProfiles(profiles);returnthis;}publicSpringApplicationBuilderproperties(String...defaultProperties){this.application.setDefaultProperties(...);returnthis;}publicConfigurableApplicationContextrun(String...args){this.context=this.application.run(args);returnthis.context;}}// 使用示例newSpringApplicationBuilder(MyApplication.class).bannerMode(Banner.Mode.OFF).web(WebApplicationType.SERVLET).profiles("prod").properties("server.port=8080").run(args);
优点
  • 链式调用: 代码可读性强
  • 可选参数: 灵活设置配置项
  • 不可变性: 可以创建不可变对象

1.3 单例模式(Singleton Pattern)

应用场景

Spring 容器中的 Bean 默认就是单例模式,Spring Boot 中也广泛使用。

代码示例
// SpringApplicationShutdownHook - 单例实现publicfinalclassSpringApplicationShutdownHookimplementsRunnable{// 静态内部类实现懒加载单例privatestaticclassHook{privatestaticfinalSpringApplicationShutdownHookINSTANCE=newSpringApplicationShutdownHook();}publicstaticSpringApplicationShutdownHookgetInstance(){returnHook.INSTANCE;}privateSpringApplicationShutdownHook(){// 私有构造函数}}// 枚举单例(最安全的实现)publicenumApplicationStartup{DEFAULT;publicvoidstart(Stringname){// ...}}
优点
  • 节省资源: 只有一个实例
  • 全局访问: 方便共享状态
  • 线程安全: 可以控制并发访问

二、结构型模式

2.1 外观模式(Facade Pattern)

应用场景

Starter 机制就是外观模式的典型应用,将复杂的依赖关系和配置封装起来。

代码示例
// spring-boot-starter-web 作为一个外观// 内部包含:// - spring-boot-starter// - spring-boot-starter-json// - spring-boot-starter-tomcat// - spring-webmvc// 用户只需要引入一个依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web&
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/1 1:20:33

Phi-4-mini-reasoning vLLM监控告警:GPU显存溢出与请求超时自动通知

Phi-4-mini-reasoning vLLM监控告警&#xff1a;GPU显存溢出与请求超时自动通知 1. 模型与部署环境介绍 Phi-4-mini-reasoning 是一个基于合成数据构建的轻量级开源模型&#xff0c;专注于高质量、密集推理的数据&#xff0c;并进一步微调以提高更高级的数学推理能力。该模型…

作者头像 李华
网站建设 2026/4/1 1:17:34

SEO_ 为什么你的SEO没效果?关键原因与解决办法

SEO没效果的原因及解决办法&#xff1a;从问题分析到实用建议 在当前信息爆炸的时代&#xff0c;网络已经成为人们获取信息、进行交流和购物的重要渠道。作为网站运营者&#xff0c;提升网站的SEO&#xff08;Search Engine Optimization&#xff09;排名&#xff0c;是吸引更…

作者头像 李华
网站建设 2026/4/1 1:17:33

美团LongCat团队:560亿参数AI模型实现高难度数学证明能力突破

这项由美团LongCat团队开展的突破性研究发表在2026年3月的arXiv预印本平台上&#xff0c;论文编号为arXiv:2603.21065v1。研究团队开发了一个名为LongCat-Flash-Prover的强大AI系统&#xff0c;这个系统就像是一位超级数学侦探&#xff0c;能够独立解决那些连资深数学家都觉得棘…

作者头像 李华
网站建设 2026/4/1 1:17:33

爱站网 SEO 培训班学习时长是多久_爱站网 SEO 培训费用是多少

爱站网 SEO 培训班学习时长是多久&#xff1f; 在当今的互联网时代&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;已经成为提升网站流量和品牌知名度的关键技能。爱站网 SEO 培训班作为行业内的佼佼者&#xff0c;为许多人提供了系统化的学习途径。爱站网 SEO 培训班的…

作者头像 李华
网站建设 2026/4/3 21:23:34

Full Page Screen Capture:一键搞定超长网页截图的终极解决方案

Full Page Screen Capture&#xff1a;一键搞定超长网页截图的终极解决方案 【免费下载链接】full-page-screen-capture-chrome-extension One-click full page screen captures in Google Chrome 项目地址: https://gitcode.com/gh_mirrors/fu/full-page-screen-capture-chr…

作者头像 李华
网站建设 2026/5/23 12:39:34

Cumulocity Arduino库:嵌入式MQTT轻量接入方案

1. Cumulocity IoT 客户端库技术解析&#xff1a;面向嵌入式设备的轻量级 MQTT 接入方案1.1 库定位与工程价值CumulocityArduinoLib 是一款专为 WiFi 能力 Arduino 平台&#xff08;如 ESP32、ESP8266&#xff09;设计的轻量级物联网客户端库&#xff0c;其核心目标是实现设备与…

作者头像 李华