0
点赞
收藏
分享

微信扫一扫

【设计模式】单例模式——单例模式的饿汉式和枚举式实现

饿汉式

单例模式的最简单实现如下:

public class Singleton implements Serializable {
    private static Singleton instance = new Singleton();
    private Singleton(){}

    public static Singleton getInstance(){
        return instance;
    }
}

这种写法被称为“饿汉式”,在类加载阶段就初始化单例对象,因为是在线程出现之前实例化,所以不存在线程安全问题。

饿汉式开发效率和执行效率都比较高,也不存在线程安全问题,但饿汉式实现的单例从进程/虚拟机创建开始就占用一部分内存,并且容易被clone()方法、反射和反序列化破坏。

枚举式

正如所有被class修饰的类都是java.lang.Obejct的子类一样,所有被enum修饰的类也都是java.lang.Enum的子类,

public enum EnumSingleton {
    INSTANCE;

    private Object data;

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }

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

因为JDK的内部机制,枚举式单例是线程安全的,也不存在被clone()方法、反射和反序列化破坏的问题。

又因为枚举式本质上也是一种饿汉式,所以也存在从一开始就占有部分内存的问题。

举报

相关推荐

0 条评论