單例模式,是一種常用的軟體設計模式,通過單例模式,可以保證系統中,應用該模式的這個類隻有一個執行個體,就是說,一個類隻有一個對象執行個體。
單例模式的實作步驟分為以下3步
将構造方法私有化,使其不能在類的外部通過 new 關鍵字執行個體化該類對象
在該類内部産生一個唯一的執行個體化對象,并且将其封裝為 private static 類型的成員變量
定義一個靜态方法傳回這個唯一對象
根據執行個體化對象的時機,單例設計模式又分為以下2種
餓漢單例設計模式
懶漢單例設計模式
餓漢單例設計模式就是随着類的加載的時候已經将對象建立完畢,不管以後會不會使用到該執行個體對象,先建立了再說。
比如這裡定義一個皇帝類
在測試類中進行測試
通過測試可以發現,執行個體化出來的k1、k2對象的位址值一緻。也就是同一個對象執行個體。
懶漢單例設計模式就是調用 getInstance() 方法時執行個體對象才被建立,先不急着執行個體化出對象,而是等要用的時候才執行個體化出對象。
2個對象執行個體列印出來的位址值也是一緻的。
懶漢單例設計模式在多線程環境下可能會執行個體化出多個對象,不能保證單例的狀态,是以需要加上關鍵字 synchronized,保證其同步安全。如下