定义
保证一个类仅有一个实例,并提供一个全局访问点;
适用场景
- 想确定任何情况下都绝对只有一个实例;
优点
- 在内存里只有一个实例,减少内存开销;
- 遇到频繁创建销毁一个对象的时候,提高性能;
- 设置全局访问点,严格控制访问;
缺点
- 没有接口,扩展困难;
- 如果一个类的对象的状态要来回变化,单例就不适合;
- 单例类的职责过重,一定程度上违背“单一职责原则”;
重点
- 私有构造器;
- 线程安全;
- 延迟加载;
- 序列化和反序列化的安全;
- 防止反射攻击;
- Double Check;
- 静态内部类的实现方案(基于类初始化的延迟加载解决方案);
实用技能
- 反编译;
- 内存原理;
- 多线程Debug;
单例相关设计模式
- 单例模式和工厂模式;
- 单例模式和享元模式;