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