设计模式演绎-单例模式
定义
Ensure a class has only one instance, and provide a global point of access to it.
确保某一个类只有一个实例,而且自行实例化并向整个系统提供整个实例。
通用类图
- 单例模式类的构造方法是一个私有构造方法
- 单例模式类的属性包含自身,并限制为
private static final
类型,默认调用自身的构造函数 - 单例模式类提供
static
的getSingleton()
方法供外部引用
通用代码
public class Singleton(){ |
一个例子
单例模式的优点
- 单例模式减少了内存开支和创建、销毁的开销
- 单例模式永驻内存,减少了性能开销。比如Spring的bean。
- 单例模式可以避免对资源的多重占用。比如写文件的操作,由于只有一个实例存在内存中,避免对同一个资源文件的同时写操作。
- 单例模式可以在系统设置全局的访问点,优化和共享资源访问。
单例模式的缺点
- 单例模式没有接口,扩展很困难,只能通过修改代码。
- 单例模式没有完成时,没法测试。因为没有接口,所以没法mock。
- 单例模式通常很难保证单一职责。
单例模式的使用场景
各种要求一个类只能有一个对象的场景。
- 要求生成唯一序列号的环境。
- 在整个项目中需要一个共享访问点或共享数据的时候。
- 创建一个对象需要消耗的资源过多的时候,比如数据库连接。
- 需要定义大量的静态常量和静态方法的环境。比如工具类。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 LeFer!
评论