单例模式:保证一个类只有一个实例,并提供给它一个全局访问点。也就是说实例要么没有,有也只能是一个。
1、最简单的单例模式
class
Singleon
{
private
static
Singleon instance;
private
Singleon()
{ }
public
static
Singleon GetInstance()
{
if
(instance ==
null
)
{
instance =
new
Singleon();
}
return
instance;
}
}
|
客户端代码
private
static
void
SingleModeTest()
{
Singleon s1 = Singleon.GetInstance();
Singleon s2 = Singleon.GetInstance();
if
(s1 == s2)
{
Console.WriteLine(
"两个对象实例是相等的"
);
}
}
|
缺点:在多线程中还是会创建多个实例的。
2、 多线程下解决被多个实例
class
SingleonMultiThread
{
private
static
SingleonMultiThread instance;
private
static
readonly
object
syncRoot =
new
object
();
private
SingleonMultiThread()
{ }
public
static
SingleonMultiThread GetInstance()
{
if
(instance ==
null
)
{
lock
(syncRoot)
{
if
(instance ==
null
)
{
instance =
new
SingleonMultiThread();
}
}
}
return
instance;
}
}
|
3、采用静态初始化变量的方法
sealed
class
SingleonStaticInit
{
private
static
SingleonStaticInit instance =
new
SingleonStaticInit();
private
SingleonStaticInit()
{ }
public
static
SingleonStaticInit GetInstance()
{
return
instance;
}
}
|
采用静态初始化方法,不需要显示的编写线程安全代码,即可解决多线程环境下不安全问题。第三中方法最好。
本文转自Work Hard Work Smart博客园博客,原文链接:http://www.cnblogs.com/linlf03/archive/2012/06/17/2552860.html,如需转载请自行联系原作者