單例模式常用的的兩種寫法
單例模式很常用,但是寫法各異,哪種更合理高效呢。一般單例都是五種寫法。懶漢式,餓漢式,雙重校驗鎖,列舉和靜態內部類。什麼時候用懶漢式,何時用餓漢式應該清楚。
一, 單例模式特點:
1)一個類只有一個例項。
2)它必須自行建立這個例項。
3)它必須自行向整個系統提供這個例項。
二,懶漢式+雙重校驗鎖
懶漢式,類載入時不初始化例項,可以延遲載入例項。通過getInstance()方法,並且它的構造方法是private的,這樣就保證了只能有一個物件存在。雙重檢查鎖定才能夠正常達到單例效果。執行緒安全,更高效。
public class MyOkHttpUtils {
public static OkHttpClient okHttpClient;
public static MyOkHttpUtils myOkHttpUtils;
public static MyOkHttpUtils getInstance()
{
if (myOkHttpUtils == null) {
synchronized (MyOkHttpUtils.class) {
if (myOkHttpUtils == null) {
myOkHttpUtils = new MyOkHttpUtils();
}
}
}
return myOkHttpUtils;
}
private MyOkHttpUtils()
{
if (okHttpClient == null) {
OkHttpClient.Builder okHttpClientBuilder = new OkHttpClient.Builder();
okHttpClientBuilder.connectTimeout(5, TimeUnit.SECONDS);
okHttpClient = okHttpClientBuilder.build();
}
}
}
首先判斷instance是不是為null,如果為null,加鎖初始化;如果不為null,直接返回instance。 這就是double-checked locking設計實現單例模式。平時這樣用,強烈推薦。
三,餓漢式單例模式
餓漢式單例模式,在類載入時就完成了初始化,所以類載入較慢,但獲取物件的速度快。這種單例模式寫法:
//在訪問HttpMethods時建立單例
private static class SingletonHolder{
private static final HttpMethods INSTANCE = new HttpMethods();
}
//獲取單例
public static HttpMethods getInstance(){
return SingletonHolder.INSTANCE;
}
四,總結
在專案中,經常使用雙重校驗鎖實現懶漢式單例模式,執行緒安全,高效。比如下載管理器,okHttpClient例項,確保整個專案只有一個例項,資源有效利用。
未完待續,杜乾,Dusan ,Q 291902259
相關文章
- 單例模式的五種寫法單例模式
- 單例模式的六種寫法單例模式
- 單例模式的七種寫法單例模式
- Java:單例模式的七種寫法Java單例模式
- 單例模式(下)---聊一聊單例模式的幾種寫法單例模式
- 單例模式(下) - 聊一聊單例模式的幾種寫法單例模式
- 單例模式(下) – 聊一聊單例模式的幾種寫法單例模式
- 設計模式 - 單例模式Singleton的8種寫法設計模式單例
- 單例模式有幾種寫法?單例模式
- 單例的幾種寫法單例
- 單例模式你會幾種寫法?單例模式
- 孔乙己的疑問:單例模式有幾種寫法單例模式
- 單例模式的七種寫法,你都知道嗎?單例模式
- 單例模式的正確寫法單例模式
- Python單例的一種簡單寫法Python單例
- 面試中單例模式有幾種寫法?面試單例模式
- 面試突擊50:單例模式有幾種寫法?面試單例模式
- Java基礎系列-單例的7種寫法Java單例
- 論單例的寫法單例
- 八、目前JDK中,單例模式這3種寫法你知道嗎?JDK單例模式
- 回字有四種寫法,那你知道單例有五種寫法嗎單例
- Kotlin下的5種單例模式Kotlin單例模式
- 單例模式的各種實現單例模式
- Python:兩個使用單例模式的方法Python單例模式
- 常用設計模式-單例模式設計模式單例
- Java併發程式設計中的設計模式解析(二)一個單例的七種寫法Java程式設計設計模式單例
- Java常用設計模式-單例模式Java設計模式單例
- 單利模式的兩種最佳實現模式
- css的三種常用寫法是什麼CSS
- Singleton——單例模式(8種)單例模式
- Java 實現單例模式的 9 種方法Java單例模式
- Python單例模式(Singleton)的N種實現Python單例模式
- 單例模式的各種實現方式(Java)單例模式Java
- JS實現單例模式的多種方案JS單例模式
- 常用設計模式-單例模式(Singleton pattern)設計模式單例
- 如何寫出一個好的單例模式單例模式
- 幾種常用設計模式的簡單示例設計模式
- 實現單例模式的 9 種方法,你知道幾種?單例模式
- 關於python單例的常用幾種實現方法Python單例