23种设计模式之单例模式(SingletonPattern)【设计模式】
- 其他
- 2025-09-13 13:39:01

文章目录 一、简介二、关键点三、实现单例模式的步骤四、C#示例4.1 简单的单例模式4.2 线程安全的单例模式(双重检查锁定)4.3 静态初始化单例模式 五、单例模式优缺点5.1 优点5.2 缺点 六、适用场景七、示例的现实应用
一、简介
单例模式(Singleton Pattern)是一种创建型设计模式,确保一个类只有一个实例,并提供一个全局访问点来访问该实例。单例模式主要用于控制资源的访问,确保某些类只有一个实例,并且这个实例能够被全局访问。
二、关键点 唯一实例:确保一个类只有一个实例。全局访问点:提供一个全局访问点来访问该实例。 三、实现单例模式的步骤 私有构造函数:防止类被实例化。私有静态变量:持有该类的唯一实例。公共静态方法:提供一个全局访问点来访问该实例。 四、C#示例 4.1 简单的单例模式 public class SimpleSingleton { // 私有静态变量,持有唯一实例 private static SimpleSingleton instance = null; // 私有构造函数,防止外部实例化 private SimpleSingleton() { } // 公共静态方法,提供全局访问点 public static SimpleSingleton Instance { get { if (instance == null) { instance = new SimpleSingleton(); } return instance; } } } 4.2 线程安全的单例模式(双重检查锁定)在多线程环境中,上面的实现可能会导致多个实例的创建。为了解决这个问题,我们可以使用双重检查锁定(Double-Check Locking)来实现线程安全的单例模式。
public class ThreadSafeSingleton { // 私有静态变量,持有唯一实例,并使用 volatile 关键字确保多线程可见性 private static volatile ThreadSafeSingleton instance = null; private static readonly object lockObject = new object(); // 私有构造函数,防止外部实例化 private ThreadSafeSingleton() { } // 公共静态方法,提供全局访问点 public static ThreadSafeSingleton Instance { get { if (instance == null) { lock (lockObject) { if (instance == null) { instance = new ThreadSafeSingleton(); } } } return instance; } } } 4.3 静态初始化单例模式这种实现利用了 .NET 的静态构造函数,保证了线程安全性,并且代码更加简洁。
public class StaticInitializationSingleton { // 静态变量,持有唯一实例 private static readonly StaticInitializationSingleton instance = new StaticInitializationSingleton(); // 私有构造函数,防止外部实例化 private StaticInitializationSingleton() { } // 公共静态属性,提供全局访问点 public static StaticInitializationSingleton Instance { get { return instance; } } } 五、单例模式优缺点 5.1 优点 唯一实例:确保系统中只有一个实例,节省系统资源。全局访问点:提供一个全局访问点,方便访问该实例。 5.2 缺点 可能造成单一职责原则的违背:单例类可能承担过多的责任。难以进行单元测试:由于全局访问点的存在,单例模式在单元测试中可能会引入依赖性问题。隐藏的依赖关系:单例模式会在代码中隐藏类与类之间的依赖关系,使得代码变得难以理解和维护。 六、适用场景 需要控制实例数量:例如配置管理类、日志管理类等。需要提供全局访问点:例如访问数据库连接的类、线程池管理类等。 七、示例的现实应用单例模式在许多现实应用中都有应用:
配置管理:一个系统的配置通常需要全局访问,但只需要一个实例来管理。日志记录器:日志记录器通常需要全局访问,但只需要一个实例来管理日志的写入。数据库连接池:数据库连接池需要管理数据库连接的创建和释放,确保系统中只有一个连接池实例。通过使用单例模式,可以确保一个类只有一个实例,并提供一个全局访问点来访问该实例,提高系统资源的利用率和全局访问的方便性。
23种设计模式之单例模式(SingletonPattern)【设计模式】由讯客互联其他栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“23种设计模式之单例模式(SingletonPattern)【设计模式】”
上一篇
2.css简介
下一篇
蓝桥与力扣刷题(蓝桥k倍区间)