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

朋友那天去面试,还有一题,写出一个简单的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);
        }
    }
嘻嘻,几乎没加注释。
另外:
单件与线程:可能会发生这种情况,两个线程可能在同一时间初始化一个单件,假定一个方法发现一个单件不存在,此时,另一个线程开始执行,这个线程也发现这个单件不存在,所以两个方法都要初始化这个单件,所以,加入锁机制,让一个单件初始化的过程中,另一个线程等待,等到单件初始化完毕,线程发现单件已经存在了。

posted on 2006-05-27 10:50  萝卜青菜  阅读(201)  评论(0编辑  收藏  举报

导航