文章目录

  • 单例模式
  • 责任链
  • 工厂模式
  • 适配器模式
  • 代理模式
  • 模板方法
  • 观察者模式
  • 原型模式
  • 建造者模式
  • 装饰者模式
  • 委托者模式
  • 策略模式
  • 访问者模式


单例模式

  • 概述
    在内存中只有一个实例,减少内存开支
  • 应用
    spring 中所有的 bean 对象默认都是单例的

责任链

  • 概述
    使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间耦合,将这些处理的对象连成一条链,并沿这条链传递该请求
  • 应用
    使用 AOP 在进行通知调用的时候,会使用责任链模式

工厂模式

  • 概述
    在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。
  • 应用
    BeanFactory 从 xml 或者注解加载 BeanDefinition,然后实例化对象
    ProxyFactory ProxyCreatorSupport 的子类,用来创建代理对象

适配器模式

  • 概述
    使用一个已经存在的类,如果它的方法、入参等与你不同,就应该使用适配器模式,客户代码可以统一调用同一接口
  • 应用
    通知的时候有Adapter,AdvisorAdapter

代理模式

  • 概述
    一个类代表另一个类的功能
  • 应用
    使用cglib,jdk进行动态代理

模板方法

  • 概述
    把不变的行为搬移到超类,提供很好的代码复用平台
  • 应用
    postProcessBeanFactory,onRefresh,initPropertySources

观察者模式

  • 概述
    当一个对象改变需要同时改变其他对象
  • 应用
    spring 事件监听

原型模式

概述
通过克隆的方式创建对象,避免重复做初始化操作
应用
可以通过作用域的方式来改变bean为prototype

建造者模式

概述
用户指定需要建造的类型就可以得到他们,而不用知道具体建造的过程和细节
应用
BeanDefinitionBuilder 为了简化BeanDefinition的创建过程,每次setXXX都会返回BeanDefinitionBuilder实例,方便以链条编码的方式创建BeanDefinitionBuilder

装饰者模式

概述
允许向一个现有的对象添加新的功能,同时又不改变其结构
应用
BeanWrapper spring 中的核心接口,是 spring 中的一个包装类,具有单独或者批量获取和设置属性值,获取属性描述符以及查询属性可读可写的能力,还可以完成类型的转换

委托者模式

概述
有两个对象参与处理同一个请求,接受请求的对象将请求委托给另一个对象来处理
应用
BeanDefinitionParserDelegate 定义解析Element的各种方法

策略模式

概述
在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。
应用
ClassPathXmlApplicationContext 读取 src 目录下的配置文件
FileSystemApplicationContext 系统文件路径,文件的目录。(注意:如果你的xml文件放在WEB-INF文件夹下,需要用这个,否则会找不到该文件)

访问者模式

概述
元素对象已接受访问者对象,这样访问者对象就可以处理元素对象上的操作
应用
BeanDefinitionVisitor BeanDefinitionVisitor 根据 BeanDefinition 属性的不同,进行不同的解析