冰楓論壇

 找回密碼
 立即註冊
搜索
查看: 3689|回覆: 0
打印 上一主題 下一主題

[討論] [原創簡短教學] Java 中的 Singleton 設計模式:深入探索與示例

[複製鏈接]

8

主題

0

好友

8

積分

新手上路

Rank: 1

UID
404642
帖子
9
主題
8
精華
0
積分
8
楓幣
98
威望
8
存款
0
贊助金額
0
推廣
0
GP
8
閱讀權限
10
性別
保密
在線時間
2 小時
註冊時間
2023-9-13
最後登入
2023-10-11
跳轉到指定樓層
1
發表於 2023-9-23 11:19:53 |只看該作者 |倒序瀏覽
Singleton 設計模式是一種常見的設計模式,用於確保某個類只有一個實例並提供一個全局訪問點。在這篇教學中,我們將重新探討如何在 Java 中實現 Singleton 模式,並提供簡單的例子來說明。

1. 基本的 Singleton
這是最基本的 Singleton 實現方法,只有在需要時才創建實例。
  1. public class BasicSingleton {
  2.     private static BasicSingleton instance;

  3.     private BasicSingleton() {}

  4.     public static BasicSingleton getInstance() {
  5.         if (instance == null) {
  6.             instance = new BasicSingleton();
  7.         }
  8.         return instance;
  9.     }
  10. }
複製代碼
說明:當 getInstance() 被調用時,我們首先檢查實例是否已經存在。如果不存在,我們創建一個新的實例。

2. 線程安全的 Singleton

在多線程環境中,我們需要確保 Singleton 是線程安全的。
  1. public class ThreadSafeSingleton {
  2.     private static ThreadSafeSingleton instance;

  3.     private ThreadSafeSingleton() {}

  4.     public static synchronized ThreadSafeSingleton getInstance() {
  5.         if (instance == null) {
  6.             instance = new ThreadSafeSingleton();
  7.         }
  8.         return instance;
  9.     }
  10. }
複製代碼
說明:使用 synchronized 關鍵字確保在多線程環境中只有一個線程可以進入 getInstance() 方法。

3. 雙重檢查鎖定 Singleton

這種方法結合了懶惰初始化和線程安全,但更為高效。
  1. public class DoubleCheckSingleton {
  2.     private static volatile DoubleCheckSingleton instance;

  3.     private DoubleCheckSingleton() {}

  4.     public static DoubleCheckSingleton getInstance() {
  5.         if (instance == null) {
  6.             synchronized (DoubleCheckSingleton.class) {
  7.                 if (instance == null) {
  8.                     instance = new DoubleCheckSingleton();
  9.                 }
  10.             }
  11.         }
  12.         return instance;
  13.     }
  14. }
複製代碼
說明:首先檢查實例是否存在,如果不存在,再進入同步塊。這種方法減少了同步的開銷。

4. 使用 Enum 的 Singleton

這是一個簡單而安全的方法來實現 Singleton。
  1. public enum EnumSingleton {
  2.     INSTANCE;

  3.     public void someMethod() {
  4.         System.out.println("Enum Singleton Method");
  5.     }
  6. }
複製代碼
說明:使用 Enum 來實現 Singleton 可以確保實例的唯一性和線程安全性。


結論:

Singleton 設計模式是一個強大的工具,但要確保正確地使用它。選擇合適的 Singleton 實現方法取決於你的具體需求和環境。

收藏收藏0 推0 噓0


把本文推薦給朋友或其他網站上,每次被點擊增加您在本站積分: 1鑰匙
複製連結並發給好友,以賺取推廣點數
簡單兩步驟,註冊、分享網址,即可獲得獎勵! 一起推廣文章換商品、賺$$
高級模式
B Color Image Link Quote Code Smilies |上傳

廣告刊登意見回饋關於我們管群招募本站規範DMCA隱私權政策

Copyright © 2011-2024 冰楓論壇, All rights reserved

免責聲明:本網站是以即時上載留言的方式運作,本站對所有留言的真實性、完整性及立場等,不負任何法律責任。

而一切留言之言論只代表留言者個人意見,並非本網站之立場,用戶不應信賴內容,並應自行判斷內容之真實性。

小黑屋|手機版|冰楓論壇

GMT+8, 2024-12-22 16:17

回頂部