单例模式共分为三种方式、饿汉式、懒汉式、枚举方式等,每种方式都有各自的特点:

方式 优点 缺点 是否推荐    使用场景
饿汉式 无线程安全问题 可能造成内存浪费、无懒加载效应 推荐   源码Runtime类中使用了饿汉式
懒汉式 懒加载 有线程安全问题 推荐    
枚举方式 简单、无线程安全问题   推荐  

 

 

 

 

 

饿汉式实现方式:

//方式一  静态常量方式
public class Singleton {
    // 构造方法私有化
    private Singleton() {
    }
    // 对象私有化
    private static final Singleton singleton  = new Singleton();

    public static Singleton getSingleton() {
        return singleton;
    }
}

//方式二 静态块方式
class SingletonX {
    // 构造方法私有化
    private SingletonX() {
    }
    // 对象私有化
    private static SingletonX singleton ;
    static {
        singleton  = new SingletonX();
    }
    public static SingletonX getSingleton() {
        return singleton;
    }
}

 

懒汉式实现方式:

// 静态内部类
public class Singleton2 {
    // 构造方法私有化
    private Singleton2() {
    }
    // 通过静态类创建对象
    private static class SingletFactory {
        private static final Singleton2 INSTANCE = new Singleton2();
    }

    public static Singleton2 getSingleton() {
        return SingletFactory.INSTANCE;
    }
}

 

枚举方式:

public enum Singleton3 {
    INSTANCE;
}

  以上几种方式,都算是比较完美的,项目中可以正常使用,懒汉式采用静态内部类的方式解决了线程安全的问题以及懒加载等,还有其余几种懒汉式的方式,比如双重锁等方式,个人不推荐,最推荐的方式是使用枚举。

posted on 2020-09-10 14:56  蓝色恋人  阅读(212)  评论(0编辑  收藏  举报