簡體   English   中英

關於靜態支架單例模式

[英]Regarding static holder singleton pattern

我已經在很多方面開發了單例,這取決於像易失性/懶惰單例,急切單例,普通單例和通過Enum這樣的條件,但具體我想知道下面所示的靜態持有者模式單例。

public static class Singleton {
    private static class InstanceHolder {
        public static Singleton instance = new Singleton();
    }

    private Singleton(){}

    public static Singleton getInstance() { 
        return InstanceHolder.instance;
    }
}

請告知在哪些條件下它是有益的,有什么好處。

這種模式至少有三個原因:

  1. 靜電廠
  2. 延遲初始化
  3. 線程安全

JVM推遲初始化InstanceHolder類,直到實際使用它為止,並且因為使用靜態初始化程序初始化Singleton,所以不需要額外的同步。 任何線程對getInstance的第一次調用都會導致InstanceHolder被加載和初始化,此時Singleton的初始化通過靜態初始化器發生。

靜態支架圖案也被認為是雙重檢查鎖定反模式的最明智的替代品。

這是一種通過利用JVM加載類的方式來創建線程安全的懶惰單例的方法。 您可以在Bloch的Effective Java書中詳細了解為何以及如何正確實現它。

請記住,從testable code角度來看,單身人士(以及一般的全球狀態)並不是有益的,應該避免。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM