设计模式学习---单例模式

文章目录

        • 单例模式:
            • 1. 饿汉式:
            • 2.懒汉式(线程不安全)
            • 3.懒汉式(线程安全)
            • 4.双重检查(DCL)

单例模式:

作用是确保某个类只有一个实例,避免产生多个对象消耗过多的资源

1. 饿汉式:

从字面意思就可以看出,这种写法就是一开始就直接创建了这个对象,没有做到懒加载

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

    public Singleton() {
    }

    public static Singleton getInstance(){
        return instance;
    }
}
2.懒汉式(线程不安全)

同样从字面意思可看出,这种写法是只有你需要的时候,通过自己写的方法里面来对它进行实例,做到了懒加载,但是在多线程下不能正常工作

public class Singleton {
    private static Singleton instance;
    
    public Singleton() {
    }
    
    public static Singleton getInstance(){
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}
3.懒汉式(线程安全)

同上面描述,此写法能在多线程先正常工作,但每次调用getInstance方法都会进行同步,速度稍慢,还会造成多余的开销,所以不建议使用此种写法

public class Singleton {
    private static Singleton instance;
    
    public Singleton() {
    }
    
    public static synchronized Singleton getInstance(){
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}
4.双重检查(DCL)
public class Singleton {
    private static volatile Singleton instance;
    
    public Singleton() {
    }

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

你可能感兴趣的:(设计模式,java,单例模式,设计模式学习)