1. 程式人生 > WINDOWS開發 >c# 不同單例的不同意義

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控制。