亦称:单件模式、Singleton
单例是一种创建型设计模式,让你能够保证一个类只有一个实例,并提供一个访问该实例的全局节点。
💡 适合应用场景
- 单个构造函数,它是私有且无参数的。这可以防止其它类实例化它(不然将违反模式)。
- 一个静态变量,它保存对单个创建的实例的引用(如果有)。
- 获取对单个已创建实例的引用的公共静态方法,如果有必要,请创建一个实例。
一、
public class Singleton{private static readonly Singleton _instance = new Singleton();// 显式静态构造函数告诉 C# 编译器不要将类型标记为 beforefieldinitstatic Singleton() { }private Singleton() { }public static Singleton Instance => _instance;}
二、
public class Singleton{private static readonly Lazy<Singleton> lazy = new(() => new Singleton());public static Singleton Instance => lazy.Value;private Singleton() { }}
🤔 与静态类相比
- 如果是简单的工具类,直接使用静态类即可。
- 如果该方法可被重写,或去实现接口,使用单例。
- 例如
IGuidGenerator是一个Guid生成器,里面有Create()方法,而这个方法又很常用。您可以使用DefaultGuidGenerator去继承并实现,然后通过上述第一种或第二种创建一个单例,这样就可以很轻松的使用了。如果以后需要重写,就只需要更改获取实例的地方即可。
- 例如
在现代框架下(Spring,.NET Core Abp等),如果不是的单纯的工具类,建议一律使用接口+单例模式。
