1.1 KiB
1.1 KiB
一个类只能产生一个对象
Ensure a class has only one instance, and provide a global point of access to it.(确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。)
优点
- 内存中只有一个实例,减少内存开销
- 当一个对象的产生需要比较多的资源时,比如读取配置、产生其它依赖对象时,可以通过在应用启动时直接产生一个单例对象,然后永久驻留内存的方式来解决
- 避免对资源的多重占用
- 在系统设置全局的访问点,优化和共享资源访问
缺点
- 没有接口,扩展困难
- 对测试不利
- 与单一职责有冲突
使用场景
- 生成唯一序列号
- 需要一个共享访问点或共享数据
- 创建一个对象需要消耗的资源过多
- 需要定义大量的静态常量和静态方法的环境
注意事项
- 高并发时,单例模式的线程同步问题
- 考虑对象的复制情况,不实现 Cloneable 接口防止复制
扩展
有上限的多例模式
Spring 中每个 Bean 都是默认单例