前言设计模式
单例模式是老生常谈的一种设计模式,同时它是最简单也是最容易被忽视的一种设计模式。多线程
下面是一些我的见解:spa
(1) 单例类须要保证本身的惟一性,同时也须要避免被继承,即须要使用sealed修饰;线程
(2) 饿汉式单例先建立好实例,懒汉式单例在须要的时候再建立实例,我的倾向于后者,由于单例模式通常管理着特定资源,懒汉式单例能够避免在不须要资源的时候也会建立实例;设计
(3) 懒汉式单例须要在多线程环境下保持惟一性,所以须要在建立实例时加锁,对私有实例作双重判空(加锁前、加锁后),避免建立多个实例;blog
(4) 对于资源依赖强的单例,须要使用Dispose模式(实现IDisposable接口)。继承
一、单例模式UML图接口
二、传统单例C#实现资源
public class Singleton { private static Singleton _instance; private Singleton() { } public static Singleton Instance { get { if (_instance == null) { _instance = new Singleton(); } return _instance; } } }
三、演进单例C#实现get
public sealed class Singleton { private static Singleton _instance; private static readonly object LockHelper = new object(); private Singleton() { } public static Singleton Instance { get { if (_instance != null) { return _instance; } lock (LockHelper) { _instance = _instance ?? new Singleton(); } return _instance; } } }