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

Spring框架中用到的设计模式(都用到了哪些设计模式?)

文章目录

  • 简单工厂模式:
  • 工厂模式:
  • 单例模式:
  • 原型模式:
  • 迭代器模式:
  • 代理模式:
  • 适配器模式:
  • 观察者模式:
  • 模板模式:
  • 责任链模式:

这是一道相对有难度的题目,你不仅要回设计模式,还要知道每个设计模式在Spring中是如何使用
的。

简单工厂模式:

Spring 中的 BeanFactory 就是简单工厂模式的体现。根据传入一个唯一的标识来获得 Bean 对象,但是在传入参数后创建还是传入参数前创建,要根据具体情况来定。

工厂模式:

Spring 中的 FactoryBean 就是典型的工厂方法模式,实现了 FactoryBean 接口的 bean是一类叫做 factory 的 bean。其特点是,spring 在使用 getBean() 调用获得该 bean 时,会自动调用该 bean 的 getObject() 方法,所以返回的不是 factory 这个 bean,而是这个 bean.getOjbect()方法的返回值。

单例模式:

在 spring 中用到的单例模式有: scope=“singleton” ,注册式单例模式,bean 存放于Map 中。bean name 当做 key,bean 当做 value。

原型模式:

在 spring 中用到的原型模式有: scope=“prototype” ,每次获取的是通过克隆生成的新实例,对其进行修改时对原有实例对象不造成任何影响。

迭代器模式:

在 Spring 中有个 CompositeIterator 实现了 Iterator,Iterable 接口和 Iterator 接口,这两个都是迭代相关的接口。可以这么认为,实现了 Iterable 接口,则表示某个对象是可被迭代的。Iterator 接口相当于是一个迭代器,实现了 Iterator 接口,等于具体定义了这个可被迭代的对象时如何进行迭代的。

代理模式:

Spring 中经典的 AOP,就是使用动态代理实现的,分 JDK 和 CGlib 动态代理。

适配器模式:

Spring 中的 AOP 中 AdvisorAdapter 类,它有三个实现:MethodBeforAdviceAdapter、AfterReturnningAdviceAdapter、ThrowsAdviceAdapter。Spring会根据不同的 AOP 配置来使用对应的 Advice,与策略模式不同的是,一个方法可以同时拥有多个Advice。Spring 存在很多以 Adapter 结尾的,大多数都是适配器模式。

观察者模式:

Spring 中的 Event 和 Listener。spring 事件:ApplicationEvent,该抽象类继承了EventObject 类,JDK 建议所有的事件都应该继承自 EventObject。spring 事件监听器:ApplicationListener,该接口继承了 EventListener 接口,JDK 建议所有的事件监听器都应该继承EventListener。

模板模式:

Spring 中的 org.springframework.jdbc.core.JdbcTemplate 就是非常经典的模板模式的应用,里面的 execute 方法,把整个算法步骤都定义好了。

责任链模式:

DispatcherServlet 中的 doDispatch() 方法中获取与请求匹配的处理器HandlerExecutionChain,this.getHandler() 方法的处理使用到了责任链模式。

注意:这里只是列举了部分设计模式,其实里面用到了还有享元模式、建造者模式等。可选择性的
回答,主要是怕你回答了迭代器模式,然后继续问你,结果你一问三不知,那就尴了尬了。

http://www.lryc.cn/news/2904.html

相关文章:

  • Python中的类和对象(4)
  • window11 安装node及配置环境变量
  • 腾讯云服务器选购新手教程(新版流程超级详细)
  • 第四章 Opencv图像色彩空间与通道
  • 《论文列表》持续更新中......
  • 空间中任意一点到球的截面的最短距离
  • 麦克斯韦方程场分量公式推导
  • freertos学习之路6-任务创建和删除
  • 科都电气创业板IPO终止:曾计划募资约6亿元,郑春开等学历较低
  • 【MySQL】第十六部分 MySQL数据类型详解
  • Linux手工创建新用户
  • K_A12_003 基于STM32等单片机采集光敏二极管模块参数 串口与OLED0.96双显示
  • 天才少年稚晖君
  • 【Linux command 09】tcpdump 命令
  • 初始结构体
  • English Learning - Day56 作业打卡 2023.2.10 周五
  • Python中五个不常见的隐晦用法小结
  • SharkTeam:Move合约开发与合约安全
  • 一篇文章学习什么是进程(万字解析,超多知识点)
  • 第01章_数据库概述
  • 我所理解的高通UEFI之display的流程和移植
  • iozone -a fsync: I/O error
  • Element UI框架学习篇(五)
  • SpringBoot 全局异常处理用法及原理
  • 浏览器中HTTP请求流程是如何处理的
  • 【Pytorch项目实战】之语义分割:U-Net、UNet++、U2Net
  • 七、插件机制
  • kmp算法
  • 【Python】正则表达式简单教程
  • SAP ABAP Odata