设计模式之单例模式C#实现

前言设计模式

单例模式是老生常谈的一种设计模式,同时它是最简单也是最容易被忽视的一种设计模式。多线程

下面是一些我的见解:spa

(1) 单例类须要保证本身的惟一性,同时也须要避免被继承,即须要使用sealed修饰;线程

(2) 饿汉式单例先建立好实例,懒汉式单例在须要的时候再建立实例,我的倾向于后者,由于单例模式通常管理着特定资源,懒汉式单例能够避免在不须要资源的时候也会建立实例;设计

(3) 懒汉式单例须要在多线程环境下保持惟一性,所以须要在建立实例时加锁,对私有实例作双重判空(加锁前、加锁后),避免建立多个实例;blog

(4) 对于资源依赖强的单例,须要使用Dispose模式(实现IDisposable接口)。继承

一、单例模式UML图接口

EA类图

二、传统单例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;
        }
    }
}
相关文章
相关标签/搜索