[重复话题]最简单单件模式

朋友那天去面试,还有一题,写出一个简单的singleton。博客园好多人都写过了,自己写一个留备份。
关于私有构造函数,以前写过。 [再读书]私有构造函数
代码:
     class  Program
    {
        
static   void  Main( string [] args)
        {
            Factory ft1 
=  Factory.GetFactory();
            ft1.RecordCount();
            ft1.DisPlay();
            Factory ft2 
=  Factory.GetFactory();
            ft2.RecordCount();
            ft2.DisPlay();

            Console.Read();
        }
    }

    
public   class  Factory
    {
        
private   static  Factory _factory;
        
private   static   object  objLock  =   typeof (Factory);
        
private   long  longCount;

        
private  Factory()
        {
            longCount 
=   0 ;
        }

        
public   static  Factory GetFactory()
        {
            
lock  (objLock)
            {
                
if  ( object .Equals( null , _factory))
                {
                    _factory 
=   new  Factory();
                }

                
return  _factory;
            }
        }

        
public   void  RecordCount()
        {
            
lock  (objLock)
            {
                longCount
++ ;
            }
        }

        
public   void  DisPlay()
        {
            Console.WriteLine(longCount);
        }
    }
嘻嘻,几乎没加注释。
另外:
单件与线程:可能会发生这种情况,两个线程可能在同一时间初始化一个单件,假定一个方法发现一个单件不存在,此时,另一个线程开始执行,这个线程也发现这个单件不存在,所以两个方法都要初始化这个单件,所以,加入锁机制,让一个单件初始化的过程中,另一个线程等待,等到单件初始化完毕,线程发现单件已经存在了。

你可能感兴趣的:(模式)