java設計模式之單例模式

2021-09-24 17:46:24 字數 1622 閱讀 7743

單例模式定義

確保某乙個類只有乙個例項,而且自行例項化並向整個系統提供這個模型

優點:減少記憶體開支

減少系統的效能開銷

避免對資源的多重占用

可以在系統中設定全域性的訪問點

缺點:單例模式一般沒有介面,擴充套件困難,除了修改**沒有選擇 因為單例模式要求「自行例項化」,所以介面對於單例來說沒有意義,

對測試不利,在併發程式設計中單例模式沒有開發完成,是不能進行測試的。沒有介面也不能使用mock的方式擬造乙個物件

與單一職責有衝突,乙個類應該只實現乙個邏輯,而不關心是否是單例。

實現:

1.餓漢式

public class emperor 

public static emperor getinstance()

public static void say()

}

2.懶漢式

public class emperor1 

public static emperor1 getinstance()

return emperor;

}public static void say()

}

3.執行緒安全的餓漢

新增關鍵字synchronized

private  static emperor1 emperor = null;

private emperor1()

public static synchronized emperor1 getinstance()

return emperor;

}public static void say()

4.雙重校驗鎖

public class emperor2 

public static emperor2 getinstance()}}

return emperor;

}public static void say()

}

5.靜態內部類

無鎖化程式設計 執行緒安全 執行效率高

private static class emperorinstance

private emperor3()

public static emperor3 getinstance()

6.列舉

執行緒安全,呼叫效率高,不能延時載入,可以天然的防止反射和反序列化呼叫

public enum emperor66 

}

擴充套件:多例模式

public class emperorplus 

}private emperorplus()

//傳入皇帝姓名 建立乙個皇帝物件

private emperorplus(string name)

public static emperorplus getinstance()

public static void say()

}

java設計模式之單例模式

單位面試題目中有一道關於單例模式的題目.大多數參加筆試的同事都會寫出getinstance這個函式,但是當我問起什麼情況下需要使用單例 單例具體有什麼好處的時候 static函式也可以構建唯一例項,為什麼還需要單例.從使用單例的經驗來看,如下場景下,個人感覺應該使用單例 1.如果需要構建乙個工具類,...

java設計模式 之 單例模式

單例模式 有些類在程式執行過程中只需要儲存乙個例項,比如檔案管理類,音訊管理類,那麼我們如何實現乙個單例類呢?有以下幾點 1 定義乙個靜態變數 2 建構函式私有化 3 提供乙個public 靜態方法,獲取這個例項 4 一定要做執行緒同步 public static class singleton p...

Java設計模式之單例模式

說到單例模式 大家一定非常熟悉 這是最常見也是設計模式中相對簡單 好理解的設計模式 今天就跟大家掰一掰單例模式 單例模式確保某個類只有乙個例項 應用場景 執行緒池 快取 等物件常常被設計成單例 然而單例分兩種 1 惡漢式 2 懶漢式 我們先來看下 惡漢式 public class singleton...