首页 > Windows开发 > 详细

c#设计模式之单例模式

时间:2015-05-19 18:44:48      阅读:199      评论: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
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!