天天看点

Spring中有哪些设计模式

Spring中有哪些设计模式

  1. 单例模式
  • 单例模式的目的在于确保一个类只有一个实例,并且提供一个全局访问点。很明显,Spring中的单例Bean并非实现了单例模式,单例Bean只能保证在每个容器内部,相同ID的Bean只有一个实例。Spring中的单例模式的实现有

    TruePointcut#INSTANCE

  1. 建造者模式
  • 建造者模式的目的在于把构建一个复杂对象的过程转换为采用链式的方式构建,不执行最后的构建方法之前对象不可用。Spring中的建造者模式的实现有

    BeanDefinitionBuilder、SpringApplicationBuilder、HeadersBuilder

    等。
  1. 适配器模式
  • 适配器模式的目的在于将一个类的接口转换为想要的另一个接口。Spring中适配器模式的实现有

    HandlerAdapter、DisposableBeanAdapter

    。其中控制器有多种实现方式,比如

    @RequestMapping

    标注的控制器实现,基于

    Controller

    接口的实现,基于

    RouterFunction

    接口的实现,它们的处理方式都不一样,为了统一调用,必须适配

    HandlerAdapter

    接口。
  1. 工厂方法模式
  • 工厂方法模式定义一个创建对象的接口,让子类决定实现哪个类。Spring中的

    ApplicationContext#getBean()

    可以视为工厂方法,隐藏了Bean的创建过程和具体实现;FactoryBean、@Bean标注的静态方法和实例方法封装了Bean的创建过程,而

    ObjectFactory、ObjectProvider

    工厂可以推迟Bean创建,解决循环依赖以及单例注入多例等问题。
  1. 组合模式
  • 组合模式的目的在于把多个对象作为一个整体统一进行处理,当调用组合对象的接口方法时,其实是委托给具体的实现类来完成。Spring中的组合模式的实现有

    HandlerMethodArgumentResolverComposite、ViewResolverComposite、HandlerMethodReturnValueHandlerComposite

  1. 装饰器模式
  • 装饰器模式的目的在于给对象动态的添加额外的功能,子类可以灵活的扩展父类。Spring中的装饰器模式的实现有

    ContentCachingRequestWrapper

  1. 代理模式
  • 代理模式的目的是进行功能增强,避免子类使用继承的方式进行功能扩展,更加注重控制目标的访问。Spring中的代理模式的实现有

    JdkDynamicAopProxy、ObjenesisCglibAopProxy

  1. 责任链模式
  • 责任链模式的目的是将接受对象形成链路来依次寻找能够处理请求的对象。Spring中的责任链模式的实现有

    HandlerInterceptor

  1. 模板模式
  • 模板模式在一个操作中定义了大纲,留出一些具体的细节给子类实现。Spring中的模板模式的实现有:大部分以

    Template

    命名的类,如

    JdbcTemplate、TransactionTemplate

    ;很多以Abstract命名的抽象类,比如

    AbstractApplicationContext

  1. 观察者模式
  • 观察者模式在多个对象之间定义了一对多的依赖关系,当一个对象的状态发生了改变,所有关联的对象会被通知并且自动更新状态。Spring中观察者模式的实现有

    ApplicationListener、ApplicationEventMulticaster、ApplicationEvent

继续阅读