单例模式

单例模式的两种实现:饿汉式、懒汉式

单例模式:用一定的手段使软件系统中的某个类只能存在一个对象实例
基本特征:
1、一个类只能有一个示例对象
2、构造器私有化,不允许外部直接创建对象,保证单例模式的安全性
3、存在一个静态变量保存该实例对象
4、存在向外部提供实例对象的方法(get或者直接public暴露)

饿汉式:

顾名思义,着急拿到实例对象,所以一上来就创建(一上来就先吃),不管是否需要该对象
优点:线程安全
缺点:加载时间过长

public class Singleton{
    public static final Singleton INSTANCE = new Singleton();

    private Singleton(){
        // 私有化构造器
    }

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

懒汉式:

不着急拿到对象,等需要的时候才创建对象
优点:延迟对象的创建
缺点:线程不安全

public class Singleton{
    // 防止外部调用到空的对象实例
    private static Singleton INSTANCE = null;

    private Singleton(){
        // 私有化构造器
    }
    public static Singleton getInstance(){
        if(INSTANCE == null){
            INSTANCES = new Singleton();
        }
        return INSTANCE;
    }
}

线程安全的两种写法:
①加上同步代码块

public class Singleton{
    // 防止外部调用到空的对象实例
    private static Singleton INSTANCE = null;

    private Singleton(){
        // 私有化构造器
    }
    public static Singleton getInstance(){
        if(INSTANCE == null){
            synchronized(Singleton.class){
                if(INSTANCE == null){
                    INSTANCES = new Singleton();
                }
            }
        }
        return INSTANCE;
    }
}

②用内部类加载的方式实现

public class Singleton{
    private Singleton(){
        // 私有化构造器
    }
    private static class Inner{
        private static final Singleton INSTANCE = new Singleton();
    }
    public static Singleton getInstance(){
        return Inner.INSTANCE;
    }
}
posted @ 2021-12-13 10:15  atroot  阅读(39)  评论(0)    收藏  举报