c# 不同單例的不同意義
阿新 • • 發佈:2020-06-14
前言
在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控制。