C#.net Singleton 單體模式

來源:互聯網
上載者:User

單體模式(Singleton)是經常為了保證應用程式操作某一全域對象,讓其保持一致而產生的對象,例如對檔案的讀寫操作的鎖定,資料庫操作的時候的交易回復,還有工作管理員操作,都是一單體模式讀取的。   建立一個單體模式類,必須符合三個條件:   1:私人建構函式(防止其他對象建立執行個體);   2:一個單體類型的私人變數;   3:靜態全域擷取介面   下面我寫一個類,為了看是不是單體,就加了一個計數器,如果是同一個類,那麼這個類的計數每次調用以後就應該自動加一,而不是重建立對象歸零:   .NET c# 單體模式 

 using System; using System.Threading; 
public class Singleton
{      
private int ObjCount=0;     
private Singleton()
{         Console.WriteLine("建立對象");     }    
 private static Singleton objInstance = null;    
 public static  Singleton getInstance()
 {         
if (objInstance==null) objInstance=new Singleton();        
 return objInstance;     
}     
public void ShowCount()
{         O
bjCount++;        
 Console.WriteLine("單個對象被調用了{0}次",ObjCount);     
} 
};  然後我們來測試一下: public class ConsoleTest{     public static void Main(string[] args){         Console.WriteLine("開始執行單體模式");          for(int i=0;i<5;i++){             Singleton.getInstance().ShowCount();         }         Console.ReadLine();     } }; 

我在這個Main裡面執行了5次,看看輸出的結果: 開始執行單體模式 建立對象 單個對象被調用了1次 單個對象被調用了2次 單個對象被調用了3次 單個對象被調用了4次 單個對象被調用了5次   在這裡可以看出,每次都是使用的同一個對象,實現了單體。   為了測試在多線程下面是否是單體,下面我寫了一個多線程測試的: class ApartmentTest {     public static void RunMoreThread()     {         Thread newThread =  new Thread(new ThreadStart(ThreadSingleMethod));         newThread.SetApartmentState(ApartmentState.MTA);         Console.WriteLine("ThreadState: {0}, ApartmentState: {1},ManagedThreadId:{2}", newThread.ThreadState, newThread.GetApartmentState(),newThread.ManagedThreadId );         newThread.Start();     }    public static void ThreadSingleMethod() {         Singleton.getInstance().ShowCount();     } };

然後每次for迴圈執行ApartmentTest.RunMoreThread(); 再看看輸出的結果:開始執行單體模式 ThreadState: Unstarted, ApartmentState: MTA,ManagedThreadId:3 建立對象 單個對象被調用了1次 ThreadState: Unstarted, ApartmentState: MTA,ManagedThreadId:4 單個對象被調用了2次 ThreadState: Unstarted, ApartmentState: MTA,ManagedThreadId:5 單個對象被調用了3次 ThreadState: Unstarted, ApartmentState: MTA,ManagedThreadId:6 單個對象被調用了4次 ThreadState: Unstarted, ApartmentState: MTA,ManagedThreadId:7 單個對象被調用了5次 根據ManagedThreadId,可以看出不同的線路訪問達到了單體,OK!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.