在日常开发中单例是我们使用的最常用的设计模式之一。
单例模式
确保某个类只有一个对象的实例,避免生成过多的对象浪费资源。
单例模式的构造函数不对外开放,一般设置private。
通过静态方法返回对象。
确保单例类的对象只有一个。
懒汉模式
public class Singleton {
private static Singleton ourInstance ;
public static synchronized Singleton getInstance() {
if (ourInstance==null){
return new Singleton();
}
return ourInstance;
}
private Singleton() {
}
}
synchronized
确保多线程下的安全。
每次调用getInstance()
方法都会进行同步,它会消耗不必要的资源。
双重检锁模式
public class Singleton {
private static volatile Singleton ourInstance =null;
public static synchronized Singleton getInstance() {
if (ourInstance==null){
synchronized (Singleton.class){
if (ourInstance==null){
return new Singleton();
}
}
}
return ourInstance;
}
private Singleton() {
}
}
第一次判断是为了避免不必要的同步。
第二次是为了null的情况下创建对象。
这种写法第一次会加载反应稍慢但是资源利用率高。
静态内部类模式
public class Singleton {
private static Singleton getOurInstance() {
return SingletonHolder.ourInstance;
}
private static class SingletonHolder {
private static final Singleton ourInstance = new Singleton();
}
}
网友评论