首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

創建型設計模式深度解析:單例模式的四種實現與優劣對比

     編輯:Java 綜合教學

創建型設計模式深度解析:單例模式的四種實現與優劣對比

定義與核心作用

單例模式確保一個類在整個應用程序中只有一個實例,並自行實例化、向全系統提供該實例。當多個實例會導致邏輯錯誤(如有序號碼生成器、配置管理器)時,必須使用單例模式。

類圖結構說明

單例模式類圖

  • 類圖三部分:類名、屬性、方法
  • <<...>> 為註釋信息
  • 修飾符:+ public,- private,# protected,無修飾符為包可見
  • 下劃線表示靜態成員

單例模式三大核心要素:

  1. 私有構造方法(防止外部 new)
  2. 私有靜態引用指向自身實例
  3. 公有靜態工廠方法返回該實例

四種主流實現方式對比

模式線程安全調用效率延時加載特殊優勢
餓漢式是高否實現最簡單
懶漢式是(同步鎖)較低是按需創建
靜態內部類是高是兼具效率與延時
枚舉單例是高否防反射/序列化破壞

代碼示例

1. 餓漢式(類加載時初始化)

public class SingletonTest01 {
    private static SingletonTest01 instance = new SingletonTest01();
    private SingletonTest01() {}
    public static SingletonTest01 getInstance() {
        return instance;
    }
}

2. 懶漢式(同步鎖保證安全)

public class SingletonTest02 {
    private static SingletonTest02 instance;
    private SingletonTest02() {}
    public static synchronized SingletonTest02 getInstance() {
        if (instance == null) {
            instance = new SingletonTest02();
        }
        return instance;
    }
}

3. 靜態內部類(推薦生產環境)

public class SingletonTest03 {
    private SingletonTest03() {}
    private static class Holder {
        static final SingletonTest03 INSTANCE = new SingletonTest03();
    }
    public static SingletonTest03 getInstance() {
        return Holder.INSTANCE;
    }
}

4. 枚舉單例(最安全)

public enum SingletonTest04 {
    INSTANCE;
    public void doSomething() {}
}

選型建議: 一般場景首選靜態內部類;極高安全要求(防反射、序列化攻擊)用枚舉;簡單工具類可用餓漢式。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved