23种设计模式在SpringCloud源码里的应用

  1. 单例模式(Singleton):Spring 中的 Bean 默认都是单例模式,保证在整个应用中只有一个实例。

  2. 工厂方法模式(Factory Method):Spring 中的 BeanFactory 和 ApplicationContext 都实现了工厂方法模式,通过工厂方法获取 Bean 实例。

  3. 抽象工厂模式(Abstract Factory):Spring 中的 BeanFactory 和 ApplicationContext 都是抽象工厂,提供了创建 Bean 实例的方法。

  4. 建造者模式(Builder):使用建造者模式来构建复杂的 Bean 对象,例如,HttpMessageConverter、RestTemplate 等。

  5. 原型模式(Prototype):Bean 可以指定作为原型,通过复制来创建新实例。

  6. 适配器模式(Adapter):Spring MVC 中的 HandlerAdapter 和 HandlerExceptionResolver 就是适配器模式的应用。

  7. 桥接模式(Bridge):Spring 中的 JdbcTemplate 和 NamedParameterJdbcTemplate 就是桥接模式的应用。

  8. 组合模式(Composite):Spring 中的 ApplicationContext 是一种树形结构,可以把 Bean 定义成一个层级结构。

  9. 装饰器模式(Decorator):Spring 中的 AOP 就是装饰器模式的应用。

  10. 外观模式(Facade):Spring 中的 Facade 模式的实现包括 JdbcTemplate、NamedParameterJdbcTemplate、SimpleJdbcInsert 等。

  11. 享元模式(Flyweight):Spring 中的使用 AOP 时,使用的切面是单例的,因此如果一个切面需要被多个 Bean 使用,可以考虑使用享元模式。

  12. 代理模式(Proxy):Spring 中的 AOP 就是通过代理模式实现的。

  13. 责任链模式(Chain of Responsibility):Spring 中的 HandlerExceptionResolver 就是责任链模式的实现。

  14. 命令模式(Command):Spring MVC 中的 Controller 就是命令模式的应用。

  15. 迭代器模式(Iterator):Spring 中的 JdbcTemplate 和 NamedParameterJdbcTemplate 都实现了迭代器模式。

  16. 中介者模式(Mediator):Spring 中的 ApplicationContext 就是中介者模式的应用。

  17. 备忘录模式(Memento):Spring 中的 HttpSessionBindingListener 就是备忘录模式的应用。

  18. 观察者模式(Observer):Spring 中的 ApplicationEvent 就是观察者模式的应用。

  19. 状态模式(State):Spring MVC 中的 HandlerMethod 就是状态模式的应用。

  20. 策略模式(Strategy):Spring 中使用的 AOP 就是策略模式的应用。

  21. 模板方法模式(Template Method):Spring 中的 JdbcTemplate 就是模板方法模式的应用。

  22. 访问者模式(Visitor):Spring 中的 BeanPostProcessor、BeanFactoryPostProcessor 就是访问者模式的应用。

  23. 解释器模式(Interpreter):在 Spring 中暂时没有明显的应用。


  1. Singleton(单例模式):Spring中的Bean默认都是单例模式,保证在同一次请求中只有一个实例存在。

  2. Factory Method(工厂方法模式):Spring中的BeanFactory就是一个经典的工厂方法模式的例子。

  3. Abstract Factory(抽象工厂模式):Spring中的AbstractFactoryBean就是一个抽象工厂模式的实现,用于创建其他Bean的的工厂。

  4. Builder(建造者模式):Spring中的RestTemplateBuilder就是一个建造者模式的实现,用于构建RestTemplate。

  5. Prototype(原型模式):Spring中的Scope为prototype的Bean每次请求都会创建新的实例。

  6. Adapter(适配器模式):Spring中的Adapter设计模式主要应用在AOP的实现中,将横切逻辑织入到Bean中。

  7. Decorator(装饰器模式):Spring中的AOP实现也是一个典型的装饰器模式的例子。

  8. Proxy(代理模式):Spring中的AOP实现也是一个典型的代理模式的例子。

  9. Facade(外观模式):Spring中的ApplicationContext就是一个外观模式的实现,用于隐藏复杂的Bean创建和依赖注入过程,并提供统一的接口。

  10. Bridge(桥接模式):Spring中的DataSource和JdbcTemplate的结合就是一个桥接模式的实现。

  11. Composite(组合模式):Spring中的ApplicationContext就是一个典型的组合模式的例子,多个子容器可以组成一个树形结构。

  12. Flyweight(享元模式):Spring中的缓存机制就是一个享元模式的实现,多次请求同一个对象时,直接从缓存中获取。

  13. Chain of Responsibility(职责链模式):Spring中的FilterChain就是一个典型的职责链模式的例子。

  14. Command(命令模式):Spring中的Command设计模式主要应用在MVC的实现中,将请求和处理逻辑分离。

  15. Iterator(迭代器模式):Spring中的数据访问对象(DAO)通常实现Iterator或List接口,用于遍历数据。

  16. Mediator(中介者模式):Spring中的ApplicationContext就是一个典型的中介者模式的例子,用于协调Bean之间的依赖关系。

  17. Memento(备忘录模式):Spring中的事务管理就是一个典型的备忘录模式的例子,用于在事务回滚时恢复状态。

  18. Observer(观察者模式):Spring中的事件机制就是一个典型的观察者模式的例子。

  19. State(状态模式):Spring中的事务管理就是一个典型的状态模式的例子,用于管理事务的生命周期。

  20. Strategy(策略模式):Spring中的数据源路由就是一个典型的策略模式的例子,用于根据不同的条件选择不同的数据源。

  21. Template Method(模板方法模式):Spring中的JdbcTemplate就是一个典型的模板方法模式的例子,用于封装JDBC操作的模板。

  22. Visitor(访问者模式):Spring中的AOP实现也是一个典型的访问者模式的例子。

  23. Interpreter(解释器模式):Spring中的表达式语言(EL)就是一个典型的解释器模式的例子,用于解析表达式。


设计模式是一种反复出现的可行方案,这些方案可以在特定情况下解决特定的问题。Spring Cloud可以说是一个设计模式的实践者,下面简述23种设计模式在SpringCloud源码里的应用:

  1. 适配器模式:Ribbon中的ILoadBalancer接口和ServerList接口及其实现类都使用了适配器模式。
  2. 抽象工厂模式:Spring Cloud的@Configuration注解就是抽象工厂模式的一个经典应用。
  3. 代理模式:Spring AOP就是基于代理模式实现的。
  4. 建造者模式:RestTemplate的Builder类使用建造者模式来构建RestTemplate对象。
  5. 职责链模式:Zuul中的Filter接口就是职责链模式的应用。
  6. 命令模式:Spring Batch中的JobLauncher和Job接口就是典型的命令模式。
  7. 组合模式:Eureka中的InstanceRegistry类和InstanceInfo类都使用了组合模式。
  8. 装饰模式:Spring Security就是通过装饰模式来实现其安全功能的。
  9. 外观模式:Spring Framework通过ApplicationContext提供了外观模式的应用。
  10. 工厂方法模式:Spring Boot中的@Configuration注解就是工厂方法模式的一个经典应用。
  11. 迭代器模式:Spring Framework中的BeanIterator就是迭代器模式的一个应用。
  12. 中介者模式:Spring Web MVC中通过DispatcherServlet来实现中介者模式。
  13. 备忘录模式:RedisTemplate就是使用备忘录模式来实现对redis的操作。
  14. 观察者模式:Spring Framework中的ApplicationListener就是观察者模式的应用。
  15. 原型模式:Spring AOP中使用原型模式来实现代理对象的创建和管理。
  16. 享元模式:Spring Framework中的BeanFactory就是享元模式的一个应用。
  17. 代理模式:Spring Data JPA就是使用代理模式来实现动态代理。
  18. 原始模式:Ribbon中的IRule接口就是原始模式的一个应用。
  19. 单例模式:Spring Framework中的BeanFactory就是单例模式的一个应用。
  20. 状态模式:Spring Batch中的StepExecutionStatus就是状态模式的一个应用。
  21. 策略模式:Spring Framework中的Resource接口就是策略模式的一个应用。
  22. 模板方法模式:Spring Framework中的JdbcTemplate就是模板方法模式的一个应用。
  23. 访问者模式:Spring Framework中的BeanPostProcessor就是访问者模式的一个应用。

    设计模式是一种被广泛应用于软件开发领域的思想,它提供了一些被视为是最佳实践的解决方案,可以帮助我们解决软件开发中所遇到的各种问题。SpringCloud 是一个流行的微服务框架,它采用了多种设计模式来实现其核心功能。下面简要介绍一下这些设计模式在SpringCloud源码中的应用:

  1. 单例模式(Singleton Pattern):SpringCloud 中的许多组件都采用了单例模式,如通用的配置管理组件 Config,分布式服务链路追踪组件 Zipkin,服务注册和发现组件 Eureka 等。

  2. 工厂模式(Factory Pattern):SpringCloud 中使用了工厂模式来创建各种组件。如 Ribbon 的 LoadBalancer 和 IRule,Hystrix 的 CircuitBreaker 和 Fallback。

  3. 抽象工厂模式(Abstract Factory Pattern):SpringCloud 中的 Hystrix 采用了抽象工厂模式来创建不同类型的 Command。

  4. 代理模式(Proxy Pattern):SpringCloud 中的 Zuul 和 Ribbon 都采用了代理模式来实现其核心功能。

  5. 模板方法模式(Template Method Pattern):SpringCloud 中的 Feign 采用了模板方法模式来定义 HTTP 请求的操作流程。

  6. 适配器模式(Adapter Pattern):SpringCloud 中的 Feign 和 Ribbon 都采用了适配器模式来适配不同的 HTTP 客户端。

  7. 观察者模式(Observer Pattern):SpringCloud 中的 Eureka 采用了观察者模式来实现服务注册和发现功能。

  8. 策略模式(Strategy Pattern):SpringCloud 中的 Ribbon 采用了策略模式来选择 LoadBalancer 和 IRule。

  9. 责任链模式(Chain of Responsibility Pattern):SpringCloud 中的 Zuul 采用了责任链模式来处理请求。

  10. 命令模式(Command Pattern):SpringCloud 中的 Hystrix 采用了命令模式来实现对服务的保护和管理。

  11. 状态模式(State Pattern):SpringCloud 中的 Hystrix 采用了状态模式来管理服务的状态。

  12. 迭代器模式(Iterator Pattern):SpringCloud 中的 Config 采用了迭代器模式来遍历配置。

  13. 桥接模式(Bridge Pattern):SpringCloud 中的 Stream 采用了桥接模式来实现不同类型的消息传输。

  14. 组合模式(Composite Pattern):SpringCloud 中的 Config 采用了组合模式来管理配置。

  15. 享元模式(Flyweight Pattern):SpringCloud 中的 Stream 采用了享元模式来缓存重复的数据。

  16. 备忘录模式(Memento Pattern):SpringCloud 中的 Hystrix 采用了备忘录模式来保存服务的状态。

  17. 解释器模式(Interpreter Pattern):SpringCloud 中的 Stream 采用了解释器模式来实现对消息的解析和处理。

  18. 装饰器模式(Decorator Pattern):SpringCloud 中的 Zuul 采用了装饰器模式来扩展其功能。

  19. 门面模式(Facade Pattern):SpringCloud 中的 Eureka 采用了门面模式来简化服务注册和发现的流程。

  20. 建造者模式(Builder Pattern):SpringCloud 中的 Sleuth 采用了建造者模式来构建新的 Span。

  21. 操作者模式(Operator Pattern):SpringCloud 中的 Stream 采用了操作者模式来实现对消息的处理。

  22. 中介者模式(Mediator Pattern):SpringCloud 中的 Config 采用了中介者模式来协调各个组件之间的交互。

  23. 访问者模式(Visitor Pattern):SpringCloud 中的 Hystrix 采用了访问者模式来实现对服务状态的访问和修改。


    在SpringCloud源码中,涉及到了大量的设计模式,其中23种设计模式都有应用,简述如下:

  1. 建造者模式:在SpringCloud中负责创建RestTemplate对象时使用了建造者模式,通过使用RestTemplateBuilder对象进行定制化构建。
  2. 单例模式:在SpringCloud中,从ApplicationContext中获取Bean时会使用到单例模式。
  3. 工厂方法模式:在SpringCloud中,RestTemplateFactory就是一个工厂方法模式的例子,它提供了创建RestTemplate实例的方法。
  4. 抽象工厂模式:在SpringCloud中,RibbonLoadBalancerClient就是一个抽象工厂模式的例子,它提供了用于创建负载均衡器的方法。
  5. 策略模式:在SpringCloud中,RibbonLoadBalancerClient中使用了策略模式,用来选择负载均衡器的算法。
  6. 适配器模式:在SpringCloud中,例如RibbonLoadBalancerClient中的ILoadBalancer接口,使用了适配器模式,它允许不同的负载均衡器实现进行适配。
  7. 模板方法模式:在SpringCloud中,HystrixCommand就是一个模板方法模式的例子,它定义了执行命令的骨架,具体实现由子类实现。
  8. 迭代器模式:在SpringCloud中,ZuulFilter使用了迭代器模式,它提供了一个迭代器来遍历过滤器链。
  9. 观察者模式:在SpringCloud中,EurekaClient使用了观察者模式,它允许客户端注册观察者来监听服务实例的注册和注销。
  10. 中介者模式:在SpringCloud中,HystrixCommand和HystrixObservableCommand使用了中介者模式来协调各个组件之间的通信。
  11. 代理模式:在SpringCloud中,RibbonLoadBalancerClient和FeignClient都使用了代理模式,提供了一个代理来处理网络请求。
  12. 装饰模式:在SpringCloud中,ZuulFilter就是一个装饰模式的例子,它允许在请求处理前后添加过滤器。
  13. 组合模式:在SpringCloud中,HystrixThreadPoolProperties和HystrixCircuitBreakerProperties使用了组合模式,它们允许将多个属性组合成一个属性集合。
  14. 命令模式:在SpringCloud中,HystrixCommand和HystrixObservableCommand使用了命令模式,它允许将请求封装成一个对象并传递给调用者。
  15. 状态模式:在SpringCloud中,HystrixCommand和HystrixObservableCommand使用了状态模式,它允许在不同的状态下执行不同的操作。
  16. 解释器模式:在SpringCloud中,EurekaServerConfiguration使用了解释器模式,它提供了一个DSL来定义Eureka Server的配置。
  17. 桥接模式:在SpringCloud中,NetflixLoadBalancerClient和RibbonLoadBalancerClient使用了桥接模式,它允许将逻辑和实现分离。
  18. 外观模式:在SpringCloud中,Feign和Ribbon使用了外观模式,提供了一个简单的接口来访问复杂的功能。
  19. 过滤器模式:在SpringCloud中,ZuulFilter使用了过滤器模式,它提供了一组过滤器来处理请求。
  20. 接口适配器模式:在SpringCloud中,RibbonLoadBalancerClient使用了接口适配器模式,它提供了一组适配器来适配不同的负载均衡器实现。
  21. 空对象模式:在SpringCloud中,EurekaClient使用了空对象模式,它允许在没有服务实例时返回一个空对象。
  22. 享元模式:在SpringCloud中,HystrixCommandProperties使用了享元模式,它允许共享多个相同的HystrixCommandProperties实例。
  23. 职责链模式:在SpringCloud中,ZuulFilter使用了职责链模式,它允许将多个过滤器组成一个过滤器链来处理请求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/122775.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CNCC2023

中国工程院院士,之江实验室主任、阿里云创始人王坚:计算驱动的科学发现和科技创新。 国际计算机学会主席雅尼斯约阿尼迪斯(ACM President Yannis Ioannidis)。 电气和电子工程师协会计算机协会主席妮塔帕特尔(IEEE CS President Nita Patel)。 2022 I…

【PWN · heap | Off-By-One】Asis CTF 2016 b00ks

萌新进度太慢了,才真正开始heap,还是从简单的Off-By-One开始吧 前言 步入堆的学习。堆的知识复杂而多,于是想着由wiki从简单部分逐个啃。 b00ks是经典的堆上off-by-one漏洞题目。刚开始看很懵(因为确实连堆的管理机制都没有完全…

ES6中的class类

ES6中的class类是一种创建对象的方式,它可以看作是一个构造函数的语法糖。使用class关键字定义一个类,可以包含属性和方法,并且可以使用new关键字创建实例对象。 以下是一个简单的class类的例子: class Person {constructor(name…

数据结构顺序栈例题一

内容仅供个人复习 #include<iostream> #define MAXSIZE 100using namespace std;typedef struct {int *base;int *top;int stackSize;}SqStack;void Initstack( SqStack &s) // 初始化栈 {s.base new int[MAXSIZE];s.top s.base;s.stackSize MAXSIZE; }void Pus…

常用的表单校验规则——邮箱/QQ/身份证号码/微信/电话/数字字母/整数/文本/密码等

1.邮箱校验规则1 //邮箱校验 export const validateEmail async (RuleObject, value) > {// const reg new RegExp(/^[A-Za-z0-9\u4e00-\u9fa5][a-zA-Z0-9_-]$/)const reg new RegExp(/^[a-zA-Z0-9_-]([a-zA-Z0-9]\.)(com|cn|net|org)$/)if (value) {if (!reg.test(valu…

windows8080端口占用

查看端口占用 netstat -ano | findstr “8080”查看占用进程 tasklist | findstr “4664”关闭占用进程 taskkill /f /t /im httpd.exe

数据结构|基础知识定义

1.值传递、地址传递、值返回、地址返回 1> 值传递&#xff1a;普通变量作为函数参数传递是单向的值传递&#xff0c;只是将实参的值复制一份给形参变量&#xff0c;形参的改变不会影响实参的值&#xff0c;因为所在内存空间不同 如果传递的是地址&#xff0c;被调函数使用指…

centos中安装Mysql8.0

其实和mysql5.7的安装差不多 1.root用户 2.更新密钥 rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022 3.安装mysql yum库 rpm -Uvh https://dev.mysql.com/ get/mysql80-community-release-el7-2.noarch.rpm 4.通过上两步&#xff0c;我们就可以使用yum去安装…

metersphere 接口自动化

Metersphere 使用步骤大致如下&#xff1a; 安装 Metersphere Metersphere 是一款基于 Docker 的应用程序&#xff0c;因此在使用 Metersphere 之前&#xff0c;需要先安装 Docker。安装 Docker 后&#xff0c;再下载 Metersphere 的安装包并解压缩。 启动 Metersphere 在终…

超详细的Windows 11虚拟机安装教程

准备安装文件创建虚拟机Windows安装 准备安装文件 1、安装好VMware WorkStation 16 Pro&#xff08;越新越好&#xff09; 2、下载好Windows 11系统镜像 其中VMware的安装教程看我往期推送&#xff0c;至少用我提供的16.2版本&#xff0c;低版本的会出现蓝屏问题。Windows …

2024王道考研计算机组成原理——输入输出系统

7.1.1 输入输出系统和几种IO控制方式 输入设备&#xff1a;把数据从主机外部输入主机内部 输出设备&#xff1a;把数据从主机内部输出到主机外部 现在的IO接口(芯片)通常被集成在南桥芯片的内部 DMA接口其实也是IO接口(芯片)的一种&#xff0c;磁盘准备的数据先一个字一个字…

node 第十二天 npm补充 详解package-lock.json在团队协作中的作用

1.npm 是Node的开放式模块登记和管理系统&#xff0c;是Node.js包的标准发布平台&#xff0c;用于Node.js包的发布、传播、依赖控制 2.今天主要说的是package-lock.json在团队协作中的作用(yarn.lock也是一样), 其实在npm5之后和yarn的区别已经很小了 正常项目用哪个都行, 几乎…

一个简单的注册的页面,如有错误请指正;(3.JavaScript)

这段代码是一个JavaScript函数&#xff0c;实现了用户登录和上传图片的功能&#xff0c;并包含了一些辅助函数。让我一一解释&#xff1a; 1. login()&#xff1a;这个函数用于登录操作。首先&#xff0c;通过$(#name).val()来获取ID为name的元素的值&#xff0c;同理获取其他…

【JAVA学习笔记】 51 - 日期类

项目代码 一、第一代日期类 1.Date: 精确到亳秒&#xff0c;代表特定的瞬间 2.SimpleDateFormat:格式和解析日期的类 3.SimpleDateFormat格式化和解析日期的具体类。它允许进行格式化(日期> 文本)、解析(文本->日期)和规范化 public class Date01 {public static voi…

机器学习(python)笔记整理

目录 一、数据预处理&#xff1a; 1. 缺失值处理&#xff1a; 2. 重复值处理&#xff1a; 3. 数据类型&#xff1a; 二、特征工程: 1. 规范化&#xff1a; 2. 归一化&#xff1a; 3. 标准化(方差)&#xff1a; 三、训练模型&#xff1a; 如何计算精确度&#xff0c;召…

阿里蚂蚁淘宝等多次一面面试面经

一面采用电话面试笔试链接做算法题&#xff08;可能开视频&#xff09;的形式 蚂蚁第一次&#xff1a; 自我介绍 技术一般使用开源技术还是自己研发 开源spring cloud等 流水线用来做什么 用户是什么人 应用场景 是toB的对吧 学到的最前沿的技术有哪些 gateway全局权限…

Openssl数据安全传输平台016:在QT中的数据库操作+在项目中的设计与实现

文章目录 1 在QT中 的数据库操作1.1 QSqlDatabase1.2 QSqlQuery 2 QT中json相关的操作类2.1 json格式字符串 -> json文档对象2.2 组织一个json数组/json对象 -> 写文件/发送 1 在QT中 的数据库操作 在Qt中进行数据库操作需要使用的类: QSqlDataBase 属于的模块: sql 使用…

.NET CORE 3.1 集成JWT鉴权和授权2

JWT&#xff1a;全称是JSON Web Token是目前最流行的跨域身份验证、分布式登录、单点登录等解决方案。 通俗地来讲&#xff0c;JWT是能代表用户身份的令牌&#xff0c;可以使用JWT令牌在api接口中校验用户的身份以确认用户是否有访问api的权限。 授权&#xff1a;这是使用JWT的…

搭建gnn环境

1.无法激活 激活pytorch遇到报错usage: conda-script.py [-h] [--no-plugins] [-V] COMMAND ... conda-script.py: error: arg-CSDN博客 参考教程 【精选】手把手教你在windows10安装GNN相关环境&#xff08;torchtorch_geometricrdkitdeepchem&#xff09;_gnn环境相关的包-…

redis6.0源码分析:字典扩容与渐进式rehash

文章目录 字典数据结构结构设计dictType字典类型为什么字典有两个哈希表&#xff1f;哈希算法 扩容机制扩容前置知识字典存在几种状态&#xff1f;容量相关的关键字段定义字典的容量都是2的幂次方 扩容机制字典什么时候会扩容&#xff1f;扩容的阈值 & 扩容的倍数哪些方法会…