创建型模式:单列模式
单例模式:(保证一个类只有一个实例,如数据库连接池、servlet中的application、Spring的bean、struts1......)
1.饿汉模式(线程安全,调用效率高,不能延时加载)
private A(){};
private static A a = new A();//只初始化一次,但可以改变属性值,属于类共有
public static A getInstance() {
return a;
}
2,懒汉模式(资源利用率高,延迟加载,真正使用时才加载)
private A(){};
private static A a ;
public static synchronized A getInstance() {
if(a==null) {
a = new A();
return a;
}
3.双重检测锁(不用在方法前同步,只有第一次调用时才同步)
private A(){};
private static A a ;
public static A getInstance() {
if(a==null) {
A a1 = null;
synchronized (A.class) {
a 1= a;
if(a1==null)
synchronized (A.class) {
if(a1==null) {
a1 = new A();
}
}
a =a1;
}
}
return a;
}
4.静态内部类(不会立即加载对象,初始化类是不会立即初始化内部类,只有调用才加载)
private A(){};
private static class As {private static final A a = new A();}
public static A getInstance() {
return As,a;
}
5.枚举单列(枚举天然是单例的,没有懒加载,枚举元素是单列,可以防止反射和反序列化)
a;
puvblic void operation() {........}