单例模式推荐的几种用法
单例模式
关键步骤:
- 私有静态单例对象
- 私有空参构造器
- 静态公有方法 getInstance()只为外部提供一个对象
- 懒汉式初级版
public class Singleton {
//懒汉式
private static Singleton singleton;
private Singleton() {}
public static Singleton getSingleton(){
if (singleton==null){
singleton = new Singleton();
}
return singleton;
}
}
- 懒汉式线程安全
public class Singleton {
//懒汉式线程安全
private static Singleton singleton;
private Singleton() {}
public static synchronized Singleton getInstance(){
if (singleton==null){
singleton = new Singleton();
}
return singleton;
}
}
- 懒汉式线程安全效率双重检查
public class Singleton {
//懒汉式线程安全效率版
private static Singleton singleton;
private Singleton() {}
public static synchronized Singleton getInstance(){
if (singleton==null){
synchronized (Singleton.class){
if (singleton==null){
singleton = new Singleton();
}
}
}
return singleton;
}
}
- 饿汉式静态内部类
public class Singleton {
//饿汉式静态内部类
private Singleton() {}
private static class SingletonInner{
private static final Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance(){
return SingletonInner.INSTANCE;
}
}
- 枚举类...........
借助JDK1.5中添加的枚举来实现单例模式。不仅能避免多线程同步问题,而且还能防止反序列化重新创建新的对象。
public enum Singleton{
INSTANCE;
public void whateverMethod(){
}
}
比任何人都要努力