一、简单工厂模式

Spring中的BeanFactory工作原理就是简单工厂模式。
根据传入的唯一标识获取对应的Bean实例对象(实例什么创建,视具体情况而定。单例初始化初始化容器创建。原型或懒加载获取时创建)

模式实质

由工厂类根据动态传入的参数,动态决定应该创建哪一个实例。
Spring具体应用

模式意义

低耦合。可以将原来硬编码的依赖,通过BeanFactory进行依赖注入。
硬编码模式下,仅存在依赖方、被依赖方。
引入BeanFactory作为实例管理的第三方。实例的依赖关系可以交给BeanFactory管理,降低原来依赖方、被依赖方的耦合度

二、工厂模式

Spring中FactoryBean接口应用,就是工厂模式

具体应用

实现了FactoryBean接口的Bean,Spring使用getBean()获取对应bean时,自动调用bean的getObjec()方法。故返回的实现FactoryBean对应的实例,而是bean.getObject()返回值。如果需要返回实现FactoryBean类实例,则调用getBean(),在入参beanName加&,即:getBean(&beanName)

三、单例模式

模式定义

保证一个类仅有一个实例,并提供一个访问它的全局访问点。

Spring中单例

Spring中单例,提供了一个访问实例的全局访问点。但没有在构造函数级别控制,因为Spring管理的是任意的java对象。
Spring中实例Bean,默认请求下,都是单例的。Spring的依赖注入都发生在AbstractBeanFactory中的getBean中。getBean()—>doGetBean()—>getSingleton()

四、适配器模式

SpringMVC中的适配器HandlerAdatper实现,就是应用了适配器模式

实现过程

  1. 1. DispatcherServlet根据HandlerMapping返回的handler,向 HandlerAdatper发起请求。
  2. 2. HandlerAdapter根据规则找到对应的Handler并让其执行,执行完毕后Handler会向HandlerAdapter返回一个ModelAndView
  3. 3. 最后由 HandlerAdapterDispatchServelet返回一个ModelAndView

模式意义

HandlerAdatper使得Handler的扩展变得容易,只需要增加一个新的 Handler和一个对应的HandlerAdapter即可。
Spring定义了一个适配接口,使得每一种Controller有一种对应的适配器实现类,让适配器代替controller执行相应的方法。这样在扩展 Controller时,只需要增加一个适配器类就完成了SpringMVC的扩展

五、责任链模式

dubbo、Netty运用责任链模式

六、模板方法模式

经典模板方法定义

父类定义了骨架(调用哪些方法及顺序),由子类实现某些特定方法
最大的好处:代码复用,减少重复代码。除了子类要实现的特定方法, 其他方法及方法调用顺序都在父类中预先写好了

模板中的两类方法

共同的方法
所有子类都会用到的代码
不同的方法
子类要覆盖的方法,分为两种:
抽象方法:父类中的是抽象方法,子类必须覆盖
钩子方法:父类中是一个空方法,子类继承了默认也是空的
注:为什么叫钩子,子类可以通过这个钩子(方法),控制父类,因为 这个钩子实际是父类的方法(空方法)

Spring中模板应用

Spring几乎所有的外接扩展都采用模板方法模式。
例如:JdbcTemplate、StringRedisTemplate等

七、策略模式

实现方式

Spring框架的资源访问Resource接口,提供了更强的资源访问能力。Spring框架本身大量使用Resource接口访问底层资源。
Resource接口本身没有提供访问任何底层资源的逻辑;针对不同的底层资源,Spring提供了不同Resource的实现类,负责不同资源的访问。
还有BeanFactory接口类似。有不同的ApplicationContext实现。(加载xml的、加载注解的)

具体实现

Spring 为 Resource 接口提供了如下实现类:
UrlResource:访问网络资源的实现类。
ClassPathResource:访问类加载路径里资源的实现类。
FileSystemResource:访问文件系统里资源的实现类。
ServletContextResource:访问相对于 ServletContext 路 径里的资源的实现类.
InputStreamResource:访问输入流资源的实现类。
ByteArrayResource:访问字节数组资源的实现类。
Resource 实现类,针对不同的的底层资源,提供了相应的资源访问逻辑,并提供便捷的包装,以利于客户端程序的资源访问。

八、观察者模式

实现方式

spring的事件驱动模型使用的是观察者模式 ,Spring中Observer模式常用的地方是listener的实现。