單例模式的六種寫法

2021-08-07 07:18:16 字數 1374 閱讀 2841

名詞解釋:

lazy loading(懶載入):意思就是不在類載入的時候不初始化,而是在呼叫方法的時候初始化。

1、懶漢式(執行緒不安全)

public class singleton 

public static singleton getinstance()

return instance;

}}

優點:lazy loading

缺點:多執行緒下不能工作。

2、懶漢式(執行緒安全)

public class singleton 

public static synchronized singleton getinstance()

return instance;

}}

這種僅僅在在第一種的基礎上給getinstance( )加了一把鎖。

優點:lazy loading,執行緒安全

缺點:效率低下

3、雙重校驗的方式

public class singleton 

public static singleton getinstance() }}

return instance;

}}

優點:執行緒安全,效率上相對2來說高一點,lazy loading

缺點:效率上還是不高

4、餓漢式

public class singleton 

public static singleton getinstance()

}

優點:讓instance在類載入的時候初始化,由於靜態變數只會在類載入的時候初始化一次,從而避免多執行緒初始化的情況。

缺點:在類載入的時候就會例項話,所以不是lazy loading,

5、靜態內部類

public class singleton 

private singleton (){}

public static singleton getinstance()

}

優點:由於靜態內部類跟外部類是平級的,所以外部類載入的時候不會影響內部類,因此實現了lazy loading;同時也是利用靜態變數的方式,使得instance只會在singletonholder載入的時候初始化一次,從而保證不會有多執行緒初始化的情況,因此也是執行緒安全的。

這個也是最合理最常規的實現單例模式的方式,推薦。

6、列舉

public enum singleton

}

這種是實現單例模式不太常規但是很合理的方式。

整理下java六種單例模式

可能總結的會有問題,我會一點點完善的.結論 建議使用第 4 種餓漢方式。如果明確要實現懶載入效果時,使用第 5 種靜態內部類方式。如果涉及到反序列化建立物件時,可以使用第 6 種列舉方式。public class singleton return instance private singleton...

python中建立單例模式的六種方式

一 基於裝飾器實現單例模式 裝飾器實現單例模式 defsingleton cls def args,kwargs if nothasattr cls,instance cls.instance cls args,kwargs return cls.instance singleton class s...

單例模式雙重校驗鎖 碼住!單例模式的六種實現方式

餓漢式實現單例模式 public class hungry private static hungry hungry new hungry public static hungry gethungry 優點 實現簡單,類載入的時候就完成了例項化,避免了執行緒的同步問題 缺點 無法實現延遲載入,可能會...