Singleton Pattern 屬於創造型設計模式,提供一種建立對象的方法,涉及一個單一類的實例,確保一個類只建立一個對象,提供訪問惟一對象的方法,能夠直接訪問,不須要建立。設計模式
目的:一個類只建立一個實例
優勢:減小全局使用該類的頻繁建立與銷燬,節省系統資源,避免對資源的多重佔用
缺點:沒有藉口,不能夠被繼承,與單一職責衝突,一個類應該只關心本身內部邏輯,不關心外部調用實例狀況多線程
實例應用:
多進程多線程,操做同一個文件時,多個線程同時操做一個文件的時候,全部文件應該經過同一個實例操做函數
實現:線程
Code:設計
public class SingletonObject { // 惟一實例 private static SingletonObject singleton; // 私有構造函數(限制外部實例化) private SingletonObject() { } // 方式一: /// <summary> /// 提供外部獲取該類實例的靜態方法(可帶參數) /// </summary> /// <returns>SingletonObject</returns> public static SingletonObject getInstance1() { if (singleton == null) singleton = new SingletonObject(); return singleton; } // 方式二: // 只讀屬性(沒法帶參數) public static SingletonObject getInstance2 { get { if (singleton == null) singleton = new SingletonObject(); return singleton; } } /// <summary> /// 類內部方法 /// </summary> /// <returns></returns> public string FuncName() { return "This is Singleton Pattern"; } }
外部調用:code
string s1 = SingletonObject.getInstance1().FuncName(); // 方法
對象
string s2 = SingletonObject.getInstance2.FuncName(); // 屬性
繼承