[设计模式]单例模式-C#实现

单例模式简介

同步锁方式

静态变量方式

 

单例模式简介

单例模式是一种常见的设计模式,它的核心结构为一个特殊的单例类。通过单例模式可以保证系统中一个类只有一个实例。常见的实现方式有:

  • 懒汉模式:不到万不得已是不会去实例化类,也就是说在第一次用到类实例的时候才会去实例化。
  • 饿汉模式:在单例类定义的时候就进行实例化;无论是否用到,先实例化再说。

一般情况下,单例模式都需要考虑线程安全,保证多线程环境下的使用安全。

同步锁方式

通过两次判断,保证在实例instance已创建时,避免加锁的消耗;当实例未创建时,通过锁保证实例只会创建一份。

sealed class SingleTonWithLocker {
    private static SingleTonWithLocker _instance = null;
    private readonly static object _lker = new object();

    public static SingleTonWithLocker GetInstance() {
        if(_instance == null) {
            lock (_lker) {
                if (_instance == null)
                    _instance = new SingleTonWithLocker();
            }
        }

        return _instance;
    }
} 

静态变量方式

通过类的静态构造函数(执行静态构造函数内部语句前,会先初始化静态变量)只调用一次的模式,保证单例。

sealed class SingleTonWithStatic {
    static SingleTonWithStatic _instance = new SingleTonWithStatic();
    public static SingleTonWithStatic Instance {
        get { return _instance; }
    }
}

此方式虽可以保证单例,但是若类有其他方法被调用,但并没有使用Instance,实例也会被创建。通过私有嵌套类,可以保证只在需要时创建实例。
即使其他函数调用被调用,只要没有主动去获取就不会去创建单例实例。

sealed class SingleTonWithNest {
    class Nested
    {
        internal static SingleTonWithNest _instance = new SingleTonWithNest();
    }

    public static SingleTonWithNest Instance
    {
        get { return Nested._instance; }
    }

    // ... Other functions
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值