模式定义
单例模式(Singleton Pattern):单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法。
- 只能有一个实例
- 必须自行创建
自行向整个系统提供访问
UML类图
- 私有静态自身类型字段
- 私有构造方法
公有静态函数返回自身对象
代码结构
public static class SingletonApp { public static void Run() { Singleton s1 = Singleton.Instance(); Singleton s2 = Singleton.Instance(); if(s1 == s2) { Console.WriteLine("Objects are the same instance"); } } } public class Singleton { private static Singleton _instance; protected Singleton() {} public static Singleton Instance() { if(_instance == null) { _instance = new Singleton(); } return _instance; } }
多线程代码结构
这里介绍著名的双锁机制。
public class Singleton { private static Singleton _instance; protected Singleton() { } public static Singleton Instance() { if (_instance == null) { lock (typeof(Singleton)) { if (_instance == null) { _instance = new Singleton(); } } } return _instance; } }
C#语法优化
我们用的C#语言,是高级、简洁的语言。那么更简洁的写法为:(注意关键词
readonly
)public class Singleton { private static readonly Singleton _instance = new Singleton(); protected Singleton() { } public static Singleton GetInstance() { return _instance; } }
情景模式
利用单例模式主要用来限制类只能实力化一个对象,所有访问都访问唯一一个对象。有时我们读取配置文件时,创建单例模式。