c# 不同单例的不同意义
前言
在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控制。