c#设计模式之单例模式

单例模式(Singleton Pattern )就是为了整个应用程序的生命周期内的任何时刻,类只能创建一个实例。

单线程下的单例模式代码:

public class Singleton
    {
        private Singleton() { }     //(1)

        private static Singleton _singleton; //(2)

        public static Singleton GetSingleton () //(3)
        {
if (_singleton == null) _singleton = new Singleton(); return _singleton; } }

注意:

(1)构造函数用private修饰,以防外部通过new来实例化;

(2)因为静态变量的生命周期和整个应用程序的生命周期是一样的,所以定义一个私有的静态全局变量_singleton来保存该类的唯一实例;

(3)提供一个全局方法访来获得该唯一实例。

 

多线程下的单例模式:

在多线程的情况下,以上的代码是不安全的,当有两个线程同一时刻执行上面的代码,因为_singleton同时为空,所以会执行_singleton = new Singleton()得到两个实例。

为了满足线程安全,需要用到同步锁

public class Singleton2
    {
        private Singleton2() { }

        private static Object locker = new Object();

        private static Singleton2 _singleton; 

        public static Singleton2 GetSingleton () 
        {
lock (locker) { if (_singleton == null) _singleton = new Singleton2(); return _singleton;
} } }

这个时候,任意时刻只能由一个线程可以访问lock(locker){}里的代码,其他线程只能排队,等待当前线程释放锁后才可以访问该代码,这样就可以保证实例的唯一性。

 

posted @ 2015-05-19 17:06  一夜秋2014  Views(943)  Comments(0Edit  收藏  举报