單例模式是設計模式中最簡單的形式之一。這一模式的目的是使得類的一個對象成為系統中的唯一實例。對於系統中的某些類來說,只有一個實例很重要,例如,一個系統中可以存在多個列印任務,但是只能有一個正在工作的任務;一個系統只能有一個視窗管理器或文件系統;一個系統只能有一個計時工具或ID(序號)生成器。 顯然單 ...
單例模式是設計模式中最簡單的形式之一。這一模式的目的是使得類的一個對象成為系統中的唯一實例。對於系統中的某些類來說,只有一個實例很重要,例如,一個系統中可以存在多個列印任務,但是只能有一個正在工作的任務;一個系統只能有一個視窗管理器或文件系統;一個系統只能有一個計時工具或ID(序號)生成器。
顯然單例模式的要點有三個;一是某個類只能有一個實例;二是它必須自行創建這個實例;三是它必須自行向整個系統提供這個實例。 從具體實現角度來說,就是以下三點:一是單例模式的類只提供私有的構造函數,二是類定義中含有一個該類的靜態私有對象,三是該類提供了一個靜態的公有的函數用於創建或獲取它本身的靜態私有對象。 C#實現單例類的方法有很多,具體可見:http://csharpindepth.com/Articles/General/Singleton.aspx#unsafe 本文介紹兩種實現方式: 方法一(推薦):class SingleOne { static SingleOne m_Instance = null; static SingleOne() { m_Instance = new SingleOne(); } private SingleOne() { // code: 其它需要構造函數來處理代碼 } public static SingleOne Instance { get { return m_Instance; } } }
方法二:
public class SingleOne { static SingleOne m_Instance = null; private static readonly object obj4Lock = new object(); private SingleOne() { // code: 其它需要構造函數來處理代碼 } public static SingleOne Instance { get { if (m_Instance == null) { lock (obj4Lock) { if (m_Instance == null) { m_Instance = new SingleOne(); } } } return m_Instance; } } }