單例模式--C#

來源:互聯網
上載者:User

標籤:

剛剛看設計模式,還不知道這些設計模式有什麼作用,但是先記錄下來,也許以後會用到!

單例模式:就是保證一個類只有一個執行個體的實現方法

 

如,有一個建構函式,使外界不能建立該類的執行個體

private 這個類的類名()
{
  Console.Write("這是單例模式測試\n");
}

設定私人,保證它不能被外部執行個體化,

在當前類中建立一個靜態變數用來儲存這個類的執行個體

private static 這個類的類名 example;

再定義一個標識,後面用來加鎖用到

private static readonly object locker = new object();

這些變數和標識都設定為私人,已保證不能被外部調用

 

之後就要建立一個公有的方法執行個體化這個類,外部通過調用這個公有的方法來得到這個類的執行個體

public static 這個類的類名 GetInstance()

1.判斷這個類是否執行個體化

if(example==null)

2.鎖住locker,是得locker被鎖期間不被執行裡面的方法

lock (locker)

3.再次判斷類是否被執行個體化

if(example==null)

4.執行個體化這個類

example= new Singleton();

5.最後輸出這個類的執行個體

return example;

 

 

得到完整代碼

public class Singleton
{
  //定義一個靜態變數來儲存類的執行個體
  private static Singleton example;

  //定義一個標識確保線程同步
  private static readonly object locker = new object();

  //定義私人建構函式,使外界不能建立該類的執行個體
  private Singleton()
  {
    Console.Write("這是單例模式測試\n");
  }

  /// <summary>
  /// 定義公有方法提供一個全域訪問點,同時你也可以定義公有屬性來提供全域訪問點
  /// </summary>
  /// <returns></returns>
  public static Singleton GetInstance()
  {

    //多線程同時運行到這裡,會同時通過這個判斷條件執行條件內的代碼
    if (example== null)//限制一
    {

      //多線程同時運行到這裡後,只能有一個線程通過lock鎖,其他線程會被掛起
      lock (locker)//限制二
      {
        // 再次判斷如果類的執行個體是否建立,如果不存在則執行個體化,反之就直接輸出類的執行個體
        if (example== null)限制三
        {
          example= new Singleton();
        }
      }
    }
    return example;
  }
}

 

如果有多個線程同時運行到限制一,會同時通過限制一,這樣的話就會就有多個線程同時運行到限制二,這些線程運行到限制二後,會進行一個小的“排序”,“排序”第一的線程通過限制二後,限制二就會自我封閉,直到“排序”第一的線程跑出限制二的範圍,限制二才會繼續允許其他“排序”的線程通過。這樣,到限制三的時候,就只有一個“排序”第一的線程了,排序第一的線程順利通過限制三,執行個體化類,跑出限制三,限制二。這裡,剛才在等待的其他線程就會陸續通過限制二了,但是它們通過限制二也已經晚了,因為這個類已經被執行個體化過了,所以它們也就無法通限制三了,而直接輸出被“排序”第一的線程執行個體化後的類執行個體,

單例模式--C#

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.