2. 创建型模式-单例模式

一个单一的类负责创建自己的对象,同时确保系统中只有单个对象被创建。

特点:

  1. 一个类只能有一个实例;(构造器是私有的)
  2. 它必须自行创建这个实例;(自己编写实例化逻辑)
  3. 它必须自行向整个系统提供这个实例;(对外提供实例化的方法)

分类:

  1. 饿汉式(静态常量)
  2. 饿汉式(静态代码块)
  3. 懒汉式(线程不安全)
  4. 懒汉式(线程安全,同步方法)
  5. 懒汉式(线程安全,同步代码块)
  6. 双重检查
  7. 静态内部类
  8. 枚举

代码:

public class Person {

    private String name;
    private String age;

    //懒汉式
//    private final static Person instance = new Person();
    private volatile static Person instance;

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

//    静态内部类,该类中有一个静态属性Singleton
    private static class SingletonInstance {
        private static final Person INSTANCE = new Person();
    }

    public static Person getInstanceInnerClass() {
        //    注意:上面的静态内部类不会随着主类加载就加载,而是会在下面的方法执行时才加载。
        return SingletonInstance.INSTANCE;
    }

    // 1. 使用同步方法保证获取实例的唯一
    public static synchronized Person getInstanceSyncMethod() {
        if (instance == null) {
            instance = new Person();
            return instance;
        }
        return instance;
    }

    // 2. 双重检查获取单例对象
    public static Person getInstance() {
        if (instance == null) {
            synchronized (Person.class) {
                if (instance == null) {
                    instance = new Person();
                    return instance;
                }
            }
        }
        return instance;
    }
}
posted @ 2022-01-18 14:12  松间明月447  阅读(26)  评论(0编辑  收藏  举报