繼續設計模式,這個模式用得應該很頻繁啊,而且也比較簡單,如果現在你還不能紙筆隨手寫個單例出來,你就得加油了哈~
直接介紹幾種線程安全的且我覺得還比較不錯的方式:
1、是不是號稱惡漢,就是類加載就初始化了
- package com.zhy.pattern.singlton;
- public class Singleton
- {
- private static Singleton instance = new Singleton();
- public static Singleton getInstance()
- {
- return instance ;
- }
- }
- package com.zhy.pattern.singlton;
- public class Singleton02
- {
- private static Singleton02 instance;
- public static Singleton02 getInstance()
- {
- if (instance == null)
- {
- synchronized (Singleton02.class)
- {
- if (instance == null)
- {
- instance = new Singleton02();
- }
- }
- }
- return instance;
- }
- }
3、使用Java的枚舉,還是很推薦的,簡單的跟神馬一樣,如果對枚舉不熟悉,小google一下
- public enum Singleton03
- {
- INSTANCE;
- }
4、使用一個持有類,主要是爲了不在初始化的時候加載
- package com.zhy.pattern.singlton;
- public class Singleton04
- {
- private static final class InstanceHolder
- {
- private static Singleton04 INSTANCE = new Singleton04();
- }
- public static Singleton04 getInstance()
- {
- return InstanceHolder.INSTANCE;
- }
- }
好了,就這麼多,以上4種都是比較推薦使用的,除了第一種會類加載的時候初始化,其他3中都不會,且4種都保證線程安全,特殊情況(除了多個類加載器,和你非要通過反射等手段生成多個對象)不考慮。