码迷,mamicode.com
首页 > Windows程序 > 详细

c#设计模式之单例模式

时间:2015-05-19 18:47:30      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:

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

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

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

        private static Singleton _singleton; //(2)

        public static Singleton GetSingleton  //(3)
        {
            get
            {
                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  
        {
            get
            {
                lock (locker)
                {
                    if (_singleton == null)
                        _singleton = new Singleton2();                    
                    return _singleton;
} } } }

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

 

c#设计模式之单例模式

标签:

原文地址:http://www.cnblogs.com/qk2014/p/4515003.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!