告別死記硬背懶漢式單例模式

2021-09-23 20:47:57 字數 1929 閱讀 3350

接著給出一段比較經典的**:

public class singleton

public static singleton getinstance()

} }return instance;

}}

我將這段**拆成一步一步的寫:

第一步:把構造方法私有化,使得其他類不能通過new例項化這個類的物件。

//第一步**

public class singleton

}

第二步:但是外部是需要用到這個類的物件的,為了讓外部獲得此類的例項物件,我們可以對外提供乙個獲取物件的方法getinstance()。

//第二步**

public class singleton

public singleton getinstance()

}

第三步:增加物件是否已經被建立的判斷,為了完成該步驟,建立乙個全域性變數instance

第四步:建立instance

//第三步、第四步**

public class singleton

public singleton getinstance()

return instance;

}}

第五步:外部呼叫getinstance方法需要通過 物件.getinstance()方式呼叫,但是因為類的構造器被私有了,外部不能建立物件,所以在getinstance方法前面加上static.

第六步:由於變數instance需要被靜態方法getinstance()呼叫,非靜態變數不能被靜態方法呼叫, 所以需要在instance前加上static,又因為instance物件是static的,所以必須用private修飾。因為如果用public修飾,外部就直接可以通過類名.instance訪問。

//第五步、第六步**

public class singleton

public static singleton getinstance()

return instance;

}}

第七步:在多執行緒環境下,if(instance == null)可能同時成立,此時要加鎖,鎖的是類物件。

//第七步**

package com.whj.offer;

public class singleton

public static singleton getinstance()

}return instance;

}}

第八步:多個執行緒都通過了第乙個if判斷,多個執行緒排隊依次獲取鎖,此時如果不加以限制,仍然會建立多個物件,為了避免這種情況的發生,需要再加乙個if判斷,做到雙重驗證。

//第八步**

public class singleton

public static singleton getinstance()

}} return instance;

}}

完整帶注釋的**:

public class singleton 

/*** 第二步,建立獲取物件的方法發getinstance()

* 第三步驟增加物件是否已經建立的判斷,為了完成該步驟,建立乙個全域性變數instance

* 第五步外部呼叫getinstance方法需要通過物件.getinstance()方式呼叫,但是因為類的構造

* 器被私有了,不能建立物件,所以在getinstance方法前面加上static.

*/public static singleton getinstance() }}

return instance;

}}

告別死記硬背 英孚教育專家解讀自然拼讀

2019年7月12日 上海 現在很多小朋友都是從很小就開始學英語,可家長也難免會擔心,學英語連大人很多時候都分分鐘堅持不住,小朋友會不會覺得太枯燥?日前,全球英語培訓專家英孚教育青少兒英語推出了全新自然拼讀奇趣營,旨在培養寶貝們的英語語感,教會寶貝掌握發音規律,輕鬆學英語!英孚自然拼讀奇趣營選用的是...

單例模式 懶漢式單例模式

單例模式有餓漢時模式和懶漢式 單例模式也就是說同一類只返回乙個物件供外部類使用 懶漢式即延遲初始化單例。在多執行緒環境下,簡單的懶漢式會有執行緒安全。懶漢式單例模式解決線性安全問題如下 1 使用雙重檢查鎖機制解決執行緒安全問題。2 單例模式還有更好的解決方案,即使用靜態類方式。懶漢式單例模式典型 p...

單例模式(懶漢式)

在學習中遇到的單例模式懶漢式的例子和自己做的筆記 單例設計模式 確保乙個類只有乙個物件 author administrator public class singletonpattern 單例設計模式 懶漢式 不建立物件,在使用時再建立物件 1.構造器私有化 避免外部直接建立物件 2.宣告乙個私有...