動機
有時候只有乙個類的例項是很重要的。比如,乙個系統應該只有乙個視窗管理例項。
單例模式是最簡單設計模式:類負責例項化自己,確保只有乙個例項,並且提供乙個訪問這個例項的入口。
目的
1. 確保只有乙個例項被建立。
2. 提供訪問這個例項的入口。
實現
使用final確保被建立一次,private的建構函式確保不被例項化。public的getinstance方法確保外部能夠訪問。下面是餓漢模式:
public class singleton
public static singleton getinstance()
}
懶漢模式:
public class singletondemo
public static singletondemo getinstance() }}
return instance;}}
適用場景和例項
1. logger類,防止每次列印log的使用都建立乙個logger例項。
2. 控制類,一般整個系統都只有乙個控制例項。
具體問題和實現
1. 執行緒安全,健壯的單例模式應該是執行緒安全的。
2. 懶漢模式使用了雙重鎖機制。
3. 餓漢模式使用靜態變數,在程式載入時就例項化,保證了只有乙個例項。
4. 抽象工廠和工廠方法通常被設計成單例模式,以保證只有乙個工廠。
5. 使用序列化和反序列化時,會有多個例項被建立,使用readresolve函式避免這個情況,不過最好是不要使用序列化。
public class singleton implements serializable
}
關鍵點
1. 在多執行緒的程式中,要注意資料的同步。
2. 序列化時要使用readresolve方法返回例項,避免多個物件被建立。
3. 如果被多個類載入器載入時,會有多個例項被建立。
設計模式 建立型 單例模式 1
有的 寫過,不再想起 有的 複製貼上後,還將回首。上個專案已經進入收尾,利用年前的閒暇,對設計模式進行乙個較為完整的學習。ok,let s go!建立型 單例模式 如果我們需要保證系統內對於某個類最多只能存在乙個例項的時候,我們就會使用單例模式。例如快取池,資料連線池,執行緒池等。在多執行緒環境下,...
設計模式之建立型 1 單例模式
定義 保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。三種寫法 1 懶漢式 public class singletonlazy public static singletonlazy getinstance return instance 優點 使用時才建立,節約資源 缺點 執行緒不安全,...
設計模式 建立型 單例模式
單例模式在整個軟體開發中還是比較常用的,頻繁使用且過程穩定的方法 全域性變數都可以使用該模式,也可以叫做公共類。單例模式需要遵循要麼出現一次,要麼不出現的規則。單例模式不提供外部例項化功能,在內部自已例項化以保證其唯一例項。具體如下 class common public static common...