单例模式
在Spring中,bean可以被定义为两种模式:prototype(多例)和singleton(单例)
singleton(单例)
只有一个共享的实例存在,所有对这个bean的请求都会返回这个唯一的实例。
prototype(多例)
每次请求都会新建一个bean实例,相当于new
通过配置bean的<scope="singleton || prototype">
工厂模式
父类定义了创建对象的接口,但是由子类来具体实现,工厂方法让类把实例化的动作推迟到了子类当中。
Spring中非常重要的一个类AbstractFactoryBean是利用工厂模式,实现getobject()返回bean实例
简单工厂
使用简单工厂的优势是:把对象的使用者和创建者之间解耦,从而提高了系统的扩展性。缺陷是:当产品修改时,工厂类也要做相应修改。
抽象工厂
这个类用于生成不同的工厂
观察者模式(常用的就是各种listener)
定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新,在被观察者里会维护一个观察者的集合,当被观察者的状态发生改变时会去遍历集合中的观察者去执行对应的操作。观察者uml类图
代理模式(实质应用aop-拦截器)
不改变原有类的前提下,在原有类某些方法执行前后,插入任意代码。所以代理模式需要写新的类对原有的类进行包装。Aop的最大意义是:在不改变原来代码的前提下,也不对源代码做任何协议接口要求。而实现了类似插件的方式,来修改源代码,给源代码插入新的执行代码。
代理模式目前实现的方式有三种:
(1) 静态代理(类似于装饰器):需要增强原有类的哪个方法,就需要对在代理类中包装哪个方法
(2) 动态代理:使用反射机制,方法和对象都是传入的变量,就可以经过传入的对象和方法而动态调用被代理对象的任何方法
(3)Cglib代理:返回对象是代理对象的子类,不需要代理对象实现接口。当调用原对象方法时,实际上调用的是代理子类的方法。