1、简单工厂模式(静态工厂方法模式)
由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类。
实例:Spring的BeanFactory
2、工厂方法模式
通常都是直接使用new关键字来创建新的对象,为了将对象的创建和使用相分离,采用工厂模式,即应用程序将对象的创建及初始化职责交给工厂对象。
3、单例模式
保证一个类仅有一个实例,并提供一个访问它的全局访问点。
Spring中的单例模式只完成了后半句话,即提供了全局的访问点BeanFactory,但没有从构造器级别去控制单例,因为Spring管理的是任意的java对象。Spring默认的bean都是singleton,可以通过singleton = "true | false" 或者 scope = "?" 来指定。
4、适配器模式
实例:Spring AOP,使用的Advice来增强被代理类的功能,实现AOP的原理就是使用代理模式(JDK动态代理或CGLib字节码生成技术代理)对类进行方法级别的切面增强,即生成目标类的代理类,在代理类的方法前,进行拦截,增强了代理类的功能,实现了面向切面编程。
5、包装器模式(装饰器模式)
动态的给一个对象添加一些额外的职责。
Spring中用到的包装器模式在类名有两种表现:一种是类名中含有Wrapper,一种是类名中含有Decorator。
6、代理模式
为其他对象提供一种代理来控制对这个对象的访问。
区别:代理模式是一种对功能的限制,而装饰器模式是增加职责。
实例:JdkDynamicAopProxy、Cglib2AopProxy
7、观察者模式
定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
实例:ApplicationListener
8、策略模式
定义一系列的算法,把他们一个个封装起来,并且使他们可相互替换。
实例:SimpleInstantiationStrategy
9、模板方法
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
实例:JdbcTemplate