單例模式(Singleton Pattern)

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(); // 屬性繼承

相關文章
相關標籤/搜索