- 单例模式要点:
- 一个类只需要一个实例化对象;
- 必须自行创建实例;
- 必须自行向整个系统提供这个实例
- 实现:
- 只提供私有构造方法;
- 有一个该类的静态私有对象;
- 提供一个静态公有方法用于创建、获取静态私有对象;
分析: - 私有构造方法->不能随意创建实例;
- 静态私有对象:确保只有一个实例对象
- 静态公有方法->提供一个外部接口,可直接通过类名调用该方法,方法内部能直接调用静态对象;
- 饿汉式实现方法:在创建类时实例化
public class SingletonOne{private SingletonOne(){}private static SingletonOne instance = new SingletonOne();public static SingletonOne getInstance(){return instance;}
}
- 懒汉式实现方法:静态公有方法中实例化
public class SingletonTwo{private SingletonOne(){}private static SingletonTwo instance = null;public static SingletonOne getInstance(){if(instance==null) instance = new SingletonTwo();return instance;}
}
- 饿汉式 vs 懒汉式
单例模式的实现方法 | 实例化对象的时间 | 空间特点 | 时间特点 | 线程安全 |
---|
饿汉式 | 在类加载时候完成 | 空间占用时间长 | 在第一次使用时加载速度快 | 线程安全 |
懒汉式 | 在第一次调用共有方法时完成 | 不会造成内存空间浪费 | 在第一次使用时加载时间相对慢 | 线程不安全 |