20230426 21. 单例模式

发布时间 2023-06-19 10:01:32作者: 流星<。)#)))≦

介绍

单例模式(Singleton),保证一个类仅有一个实例,并提供一个访问它的全局访问点。

通常我们可以让一个全局变量使得一个对象被访问,但它不能防止你实例化多个对象。一个最好的办法就是,让类自身负责保存它的唯一实例。这个类可以保证没有其他实例可以被创建,并且它可以提供一个访问该实例的方法。

单例模式因为Singleton类封装它的唯一实例,这样它可以严格地控制客户怎样访问它以及何时访问它。简单地说就是对唯一实例的受控访问。

单例模式

代码示例

懒汉式

public class Singleton1 {

    private static Singleton1 instance;

    // 构造方法private化
    private Singleton1() {
    }

    // 得到Singleton的实例(唯一途径)
    public static Singleton1 getInstance() {

        if (instance == null) {
            instance = new Singleton1();
        }

        return instance;
    }
}

饿汉式

public class Singleton2 {

    private static Singleton2 instance = new Singleton2();

    // 构造方法private化
    private Singleton2() {
    }

    // 得到Singleton的实例(唯一途径)
    public static Singleton2 getInstance() {
        return instance;
    }
}

多线程

public class Singleton3 {

    private volatile static Singleton3 instance;

    // 构造方法private化
    private Singleton3() {
    }

    // 得到Singleton的实例(唯一途径)
    public static Singleton3 getInstance() {

        if (instance == null) {
            synchronized (Singleton3.class) {
                if (instance == null) {
                    instance = new Singleton3();
                }
            }
        }
        return instance;
    }
}

还有很多其他写法可以扩展研究下。。。