当前位置: 首页 > article >正文

Spring设计模式

设计模式

是一种软件开发中的解决方案,设计原则。目的是使代码具有扩展性,可维护性,可读性,如:

  • 单例模式(Singleton Pattern)

    • Spring IoC 容器默认会将 Bean 创建为单例,保证一个类型的 Bean 在容器中只有一个实例。并提供一个全局的访问点来访问这个实例。单例模式的关键是控制类的实例化过程,确保系统中只存在一个实例,避免重复创建对象,节省系统资源。
      public class Singleton {
          // 在类加载时就创建唯一实例
          private static final Singleton instance = new Singleton();
      
          // 私有构造函数,防止外部实例化
          private Singleton() {}
      
          // 提供公共的访问方法
          public static Singleton getInstance() {
              return instance;
          }
      
          public void showMessage() {
              System.out.println("Hello, I am a Singleton!");
          }
      }
      

  • 工厂模式(Factory Pattern)---一种创建模式

    • Spring 容器本身就是一个 Bean 工厂(BeanFactory),用于实例化和管理 Bean 对象。通过工厂模式,开发者无需关心 Bean 的创建过程。简单工厂模式:通过一个工厂类创建不同类型的对象,通常使用一个静态方法
      // 产品接口
      public interface Vehicle {
          void drive();
      }
      
      // 具体产品类 Car
      public class Car implements Vehicle {
          @Override
          public void drive() {
              System.out.println("Driving a car!");
          }
      }
      
      // 具体产品类 Bike
      public class Bike implements Vehicle {
          @Override
          public void drive() {
              System.out.println("Riding a bike!");
          }
      }
      
      // 工厂类,根据参数创建不同的产品实例
      public class VehicleFactory {
          public static Vehicle createVehicle(String type) {
              if ("car".equalsIgnoreCase(type)) {
                  return new Car();
              } else if ("bike".equalsIgnoreCase(type)) {
                  return new Bike();
              } else {
                  throw new IllegalArgumentException("Unknown vehicle type");
              }
          }
      }
      

  • 代理模式(Proxy Pattern)

    • Spring AOP(面向切面编程)大量使用代理模式来实现方法拦截。例如,事务管理、日志记录、权限控制等功能就是通过动态代理来实现的。
  • 模板方法模式(Template Method Pattern)

    • Spring 中的模板类(如 JdbcTemplateRestTemplate 等)提供了模板方法模式,用于简化数据库操作、HTTP 调用等。开发者只需关注逻辑的实现,不必处理重复代码。要区别外观模式,模板方法模式的目的是定义一个算法的骨架,将一些步骤的实现延迟到子类中。模板方法模式通常包含一个模板方法,它定义了算法的执行顺序,而具体的步骤则由子类去实现。
  • 装饰器模式(Decorator Pattern)

    • Spring Boot 中的 Filter 链、HandlerInterceptor 等使用了装饰器模式来增强功能,例如添加过滤条件或拦截请求。
  • 观察者模式(Observer Pattern)

    • Spring 的事件机制使用观察者模式。通过 ApplicationEventApplicationListener,可以在事件发布时通知所有监听器。它定义了对象间一种一对多的依赖关系,使得当一个对象(称为“被观察者”)的状态发生变化时,所有依赖于它的对象(称为“观察者”)都能够收到通知并自动更新。这个模式通常用于事件监听机制,是发布-订阅模式的一种实现
  • 责任链模式(Chain of Responsibility Pattern)

    • Spring 的 FilterInterceptor 机制使用了责任链模式,将多个过滤器和拦截器串联起来,按顺序处理请求和响应。
  • 适配器模式(Adapter Pattern)

    • Spring MVC 中的 HandlerAdapter 使用了适配器模式,用于适配不同类型的请求处理器。比如可以支持 @Controller@RestController,也支持不同的返回类型。
  • 外观模式(Facade Pattern)

    • Spring 提供了简化的接口来访问复杂的子系统,就说将复杂的系统用一个简单的外壳包装起来,你只需要会用这个简单的外壳进行了,比如 JdbcTemplate 简化了 JDBC 操作的复杂过程,RestTemplate 简化了 HTTP 调用。通常外观类只提供一个简化的接口,而不关心对象的具体行为。
  • 原型模式(Prototype Pattern)

    • Spring 容器中通过 @Scope("prototype") 定义 Bean 为多例,每次注入时都会生成新的实例。通过复制现有的对象来创建新的对象,而不是通过构造函数来实例化新对象。适用于需要频繁创建新对象的场景。可通过实现cloneable接口实现。

http://www.kler.cn/a/393631.html

相关文章:

  • css:盒子模型
  • Microsoft 365 Exchange如何设置可信发件IP白名单
  • -1大于4?负数与无符号整数类型:size_t的比较问题(strlen)
  • IEC60870-5-104 协议源码架构详细分析
  • 【前端】深入浅出的React.js详解
  • 从0开始深度学习(28)——序列模型
  • Halcon3D gen_image_to_world_plane_map的理解和实用
  • github SSH连接(windows)
  • 关于我重生到21世纪学C语言这件事——指针详解(1)
  • 基于MATLAB的图片中文字的提取及识别
  • 使用Git进行项目管理
  • ApiSmart x Qwen2.5-Coder 开源旗舰编程模型媲美 GPT-4o, ApiSmart 实测!
  • C语言打印时间精确到毫秒
  • Docker运行一个fio工具镜像
  • 《TCP/IP网络编程》学习笔记 | Chapter 8:域名及网络地址
  • vue中setup语法糖的优点
  • 今日 AI 简报 | 开源 RAG 文本分块库、AI代理自动化软件开发框架、多模态统一生成框架、在线图像背景移除等
  • cursor+QT5.12.12
  • 无需云端!国产开源大语言模型llama.cpp本地实战
  • mysql时间时区修改、set global、配置文件-default-time-zone
  • Prettier - Code formatter插件使用(前端美化插件)
  • 数据中心的拥塞控制
  • 在 Linux 系统上部署 Apache Solr
  • 基于Python的网上银行综合管理系统
  • 大数据新视界 -- 大数据大厂之 Impala 性能飞跃:动态分区调整的策略与方法(上)(21 / 30)
  • WebSocket和HTTP协议的性能比较与选择