前言

在c#,可能有很多五花八门的单例给你选择,分什么懒汉模式等等什么模式,其实不同的写法对程序是有一定影响的。

正文

为什么需要单例呢?其实我们自己是可以控制单例的,只是单例模式给了我们一个好的设计。

我想没有会下面这样写:

void main()
{
var obj=new good();
obj.show();
var obj=new good();
obj.show();
}


但是有可能下面这样写:

public class a
{
public void showa()
{
var obj=new good();
obj.show();
}
}

public class b
{
public void showb()
{
var obj=new good();
obj.show();
}
}

void main()
{
var a=new a();
a.showa();
var b=new b();
b.showb();
}


这时候可能就浪费资源了,单例模式给了我们一个好的设计。

有下面几种方式:

方式一
public class good{
private good(){
do some thing
}
private good __good;
private static object lockobj=new object();
public good createinstance()
{
if(__good==null)
{
lock(lockobj)
{
if(__good==null)
{
__good=new good();
}
}
}
}
}


方式二

public class good{
private good(){
do some thing
}
private static good __good=new good();
public good createinstance()
{
return __good;
}
}


方式三

public class good{
private good(){
do some thing
}
private good __good;
private static good()
{
__good=new good();
}

public good createinstance()
{
return __good;
}
}


不同之处

第一种是普通模式。

用完了资源就会被cg释放。

第二种和第三种会一直存在内存中,由clr控制。