淺談Java設計模式——單例模式
阿新 • • 發佈:2018-12-20
一、概述
單例模式主要是為了避免因為建立了多個例項造成資源的浪費,且多個例項由於多次呼叫容易導致結果出現錯誤,而使用單例模式能夠保證整個應用中有且只有一個例項。
二、定義
定義:只需要三步就可以保證物件的唯一性
- (1) 不允許其他程式用new物件
- (2) 在該類中建立物件
- (3) 對外提供一個可以讓其他程式獲取該物件的方法
對比定義:
- (1) 私有化該類的建構函式
- (2) 通過new在本類中建立一個本類物件
- (3) 定義一個公有的方法,將在該類中所建立的物件返回
三、類圖
四、程式碼實現
單例模式中,由於建立類的時間不用又分為兩種單例類懶漢式單例類
懶漢式單例類:例項物件在第一次被呼叫時,才會將自己例項化,所以被形象的稱之為懶漢式單例類。
/** * 單例模式——懶漢式單例類 */ public class SingleCaseLazy { // 存放例項物件 private static SingleCaseLazy singleCaseLazy; // 私有化構造器,阻止被其他類new出來 private SingleCaseLazy() { } // 外界通過此類獲取本類物件 public static SingleCaseLazy getInstance() { // 先判斷例項是否存在,不存在再加鎖處理 if (singleCaseLazy == null) { // 在同一個時刻加了鎖的那部分只有一個執行緒可以進入 synchronized (SingleCaseLazy.class) { // 防止多執行緒情況下,執行緒都到達鎖上等待時,等待完成進入再次建立例項 if (singleCaseLazy == null) { // 建立例項 singleCaseLazy = new SingleCaseLazy(); } } } // 返回例項 return singleCaseLazy; } public void description() { System.out.println("SingleCaseLazy Class successful......"); } }
餓漢式單例類:靜態初始化方式在自己被載入時將自己例項化,所以被形象的稱之為餓漢式單例。
/** * 單例模式——餓漢式單例類 */ public class SingleCaseHungry { // 存放例項物件 private static SingleCaseHungry singleCaseHungry = new SingleCaseHungry(); // 私有化構造器 private SingleCaseHungry() { } // 外界通過此類獲取本類物件 public static SingleCaseHungry getInstance() { // 返回例項 return singleCaseHungry; } public void description() { System.out.println("SingleCaseHungry Class successful......"); } }
測試程式碼:
/**
* 測試程式碼
*/
public class SingleCaseDemo {
public static void main(String[] args) {
// 懶漢式單例類
SingleCaseLazy singleCaseLazy = SingleCaseLazy.getInstance();
singleCaseLazy.description();
// 餓漢式單例類
SingleCaseHungry singleCaseHungry = SingleCaseHungry.getInstance();
singleCaseHungry.description();
}
}