Android 單例模式幾種寫法及優缺點

2021-08-22 10:15:07 字數 1469 閱讀 5745

總結一波單例設計模式的幾種寫法以及各自存在的優缺點。

1,餓漢式

顧名思義,例項物件早早的就建立出來了。這種方式在類載入的時候就完成了初始化,所以類載入過程比較緩慢,但是在使用過程中獲取例項物件的速度比較快,也因為這種方式是基於類載入機制的,所以避免了多執行緒的同步問題。

public class singleton 

public static singleton getinstance()

}

優點:獲取物件的速度快;避免了多執行緒的同步問題

缺點:類載入過程慢

2,懶漢式(執行緒不安全)

顧名思義,例項物件建立時間較晚。例項物件在使用者第一次呼叫的時候初始化,雖然節約了資源,但是第一次載入時反應稍慢,而且在多執行緒的情況下不能正常使用。

public class singleton 

public static singleton getinstance()

return instance;

}}

優點:節約資源

缺點:第一次載入時需要例項化,反應稍慢;多執行緒下不能正常工作

3,懶漢式(執行緒安全)

這種寫法時執行緒安全的,在多執行緒情況下是可以正常工作的,但是每次獲取例項物件的時候都需要進行同步,造成不必要的同步開銷。在移動應用開發端用到同步的情況很少,所以不建議使用。

public class singleton 

public static synchronized singleton getinstance()

return instance;

}}

優點:在多執行緒下可以安全的使用

缺點:造成不必要的同步開銷

4,雙重檢查機制(dcl)

這種寫法有兩次判空。第一次判空是減少不必要的同步開銷,也是對上面寫法的改進;第二次判空是建立例項物件。注意這裡使用了volatile關鍵字

public class singleton 

public static singleton getinstance() }}

return instance;

}}

優點:資源利用率高,執行緒安全

缺點:第一次載入時反應稍慢,在高併發環境下有缺陷

5,靜態內部類

這種單例模式在第一次類載入時並不會初始化,只有在第一次呼叫getinstance();時虛擬機器載入singletonholder並初始化singleton例項,也是執行緒安全的,也是推薦使用的。

public class singleton 

public static singleton getinstance()

private static class singletonholder

}

優點:執行緒安全,節約資源

缺點:第一次載入時反應稍慢

單例模式幾種寫法

1.餓漢式 public class singleton public static singleton getinstance 2.懶漢式 public class singleton 雙層檢測鎖 public static singleton getinstance return instanc...

單例模式的幾種寫法

所謂單例模式就是確保某乙個類只有乙個例項,並且提供乙個全域性訪問點。例如 執行緒池 快取 對話方塊等等 1 餓漢模式 保證執行緒安全 public class singleton public static singleton getinstance 2 懶漢模式 不保證執行緒安全 public c...

單例模式的幾種寫法

1.懶漢式 public class singleinstance1 private static singleinstance1 instance public static singleinstance1 getinstance return instance 該程式缺點是執行緒不安全 publ...