创建型设计模式 - 单例模式
单例模式
概念
单例模式是创建型设计模式之一。这种模式涉及到一个单一的类,该类负责创建自己的对象, 同时确保只有单个对象被创建。所以有时会到说单例模式违背了职责单一原则。
结构图

核心代码
public class SingletonThreadSafe
{
private SingletonThreadSafe()
{
}
private static SingletonThreadSafe _instance = null;
private static readonly object obj = new object();
public static SingletonThreadSafe GetInstance()
{
//双IF加锁 IF-LOCK-IF
//第一个IF判断该对象有没有被实例化
if (_instance == null)
{
//如果没有被实例化,加锁,这个时刻只允许一个用户进去实例化,其他的用户等待
lock (obj)
{
//判断有没有用户已经实例化了,因为在lock等待的时候,排在前面的肯定已经实例化成功了,所以这里也要加上IF二次判断一下
if (_instance == null)
{
_instance = new SingletonThreadSafe();
}
}
}
return _instance;
}
}
优缺点
优点
- 在内存中保证只有一个实例,减少内存开销;
- 避免对共享资源的多重占用(比如写文件操作)。
缺点
- 在一定程度上违背了单一职责原则;
- 滥用单例可能会带来一些负面问题,如为了节省资源将数据库连接池对象设计为单例,可能会导致共享连接池对象的程序过多出现连接池溢出;如果实例化的对象长时间不被利用,系统会认为是垃圾对象自动回收,这将导致对象状态的丢失。
应用场景
- 要求生产唯一序列号
- WEB中的计数器,不用每次刷新都在数据库中加一次,用单例先缓存起来
- 创建一个对象需要消耗的资源过多,比如I/O与数据库连接等

浙公网安备 33010602011771号