关于单例模式简单实现

107 阅读1分钟

单例原则:

  • 构造私有。

  • 单例类只能有一个实例(特别是在多线程情况下保证线程安全)

  • 以静态方法或者枚举返回实例。

  • 确保反序列换时不会重新构建对象

饿汉模式

//饿汉式单例类.在类初始化时,已经自行实例化 
public class Singleton {
    private Singleton() {}
    private static final Singleton INSTANCE = new Singleton();
    //静态工厂方法 
    public static Singleton getInstance() {
        return INSTANCE;    }
}

饿汉模式以空间换时间,类创建的同时就已经创建好一个静态的对象,故不存在线程安全问题。

懒汉模式

//懒汉式单例类.在第一次调用的时候实例化自己 
public class Singleton {
    private Singleton() {}
    private static Singleton INSTANCE =null;    //静态工厂方法 
    public static Singleton getInstance() {
         if (single == null) {  
             INSTANCE = new Singleton();         }  
        return INSTANCE;    }
}

懒汉模式同步线程安全方法

1双重检查锁定

public static Singleton getInstance() {
        if (INSTANCE== null) {              synchronized (Singleton.class) {  
               if (singleton == null) {  
                  INSTANCE = new Singleton();                }  
            }  
        }  
        return INSTANCE;     }
}

2静态内部类

public class Singleton {  
    private static class LazyHolder {  
       private static final Singleton INSTANCE = new Singleton();  
    }  
    private Singleton (){}  
    public static final Singleton getInstance() {  
       return LazyHolder.INSTANCE;  
    }  
}  

 枚举单例定义

Java 1.5版本起,单元素枚举实现单例模式成为最佳的方法。

public enum  EnumSingleton {
    INSTANCE;
    public EnumSingleton getInstance(){
        return INSTANCE;
    }
}