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使用了职责链模式,它允许将多个过滤器组成一个过滤器链来处理请求。

你可能感兴趣的:(设计模式,spring,cloud,spring)