2. 创建型模式-单例模式
一个单一的类负责创建自己的对象,同时确保系统中只有单个对象被创建。
特点:
- 一个类只能有一个实例;(构造器是私有的)
- 它必须自行创建这个实例;(自己编写实例化逻辑)
- 它必须自行向整个系统提供这个实例;(对外提供实例化的方法)
分类:
- 饿汉式(静态常量)
- 饿汉式(静态代码块)
- 懒汉式(线程不安全)
- 懒汉式(线程安全,同步方法)
- 懒汉式(线程安全,同步代码块)
- 双重检查
- 静态内部类
- 枚举
代码:
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;
}
}