Java設計模式---單例模式

單例模式的幾種實現方法,具體如下:

懶漢模式

public class Singleton{
    private static Singleton instance;

    private Singleton(){
    }

    public static Singleton getInstance(){
        if(instance == null){
            instance = new Singleton();
        }
        return instance;
    }
}

優點
- 可以延遲加載

缺點
- 多線程不安全

餓漢模式

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

    private Singleton(){}

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

優點
- 多線程安全

缺點
- 加載類時就初始化完成,無法延時加載

雙重檢查

public class Singleton {

    private static Singleton instance ;

    private Singleton(){}

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

優點
- 多線程安全
- 延遲加載

缺點
- 同步耗時

靜態內部類

public class Singleton {

    private Singleton(){}

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

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

優點
- 多線程安全
- 延遲加載
- 耗時短(與雙重檢查相比)

用緩存實現

public class Singleton {

    private static final String KEY = "instance";

    private static Map<String, Singleton> map = new HashMap<>();

    private Singleton(){}

    public static Singleton getInstance(){
        Singleton singleton ;
        if (map.get(KEY) == null){
            singleton = new Singleton();
            map.put(KEY, singleton);
        } else {
            singleton = map.get(KEY);
        }
        return singleton;
    }
}

優點
- 線程安全

缺點
- 佔用內存較大

枚舉模式

public enum Singleton {

    instance;

    public void operate(){}
}

優點
- 簡潔

缺點
- 佔用內存大(Android官方不推薦使用枚舉)

更多文章請移步我的博客:DevWiki Bolg

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章