單例設計模式 餓漢式和懶漢式

2021-10-09 06:57:13 字數 1390 閱讀 5884

1.什麼是單例設計模式?

單例模式,是一種常用的軟體設計模式。在它的核心結構中只包含乙個被稱為單例的特殊類。通過單例模式可以保證系統中,應用該模式的類乙個類只有乙個例項。即乙個類只有乙個物件例項。

具體實現

需要:(1)將構造方法私有化,使其不能在類的外部通過new關鍵字例項化該類物件。

(2)在該類內部產生乙個唯一的例項化物件,並且將其封裝為private static型別。

(3)定義乙個靜態方法返回這個唯一物件。

1.1.立即載入 / 「餓漢模式」

立即載入就是使用類的時候已經將物件建立完畢(不管以後會不會使用到該例項化物件,先建立了再說。很著急的樣子,故又被稱為「餓漢模式」),常見的實現辦法就是直接new例項化。

public

class

singleton

// 靜態方法返回該例項

public

static singleton getinstance()

}

「餓漢模式」的優缺點:優點:實現起來簡單,沒有多執行緒同步問題。

缺點:當類singletontest被載入的時候,會初始化static的instance,靜態變數被建立並分配記憶體空間,從這以後,這個static的instance物件便一直佔著這段記憶體(即便你還沒有用到這個例項),當類被解除安裝時,靜態變數被摧毀,並釋放所占有的記憶體,因此在某些特定條件下會耗費記憶體。

1.2.延遲載入 / 「懶漢模式」

延遲載入就是呼叫get()方法時例項才被建立(先不急著例項化出物件,等要用的時候才給你建立出來。不著急,故又稱為「懶漢模式」),常見的實現方法就是在get方法中進行new例項化。

public

class

singleton

// 靜態方法返回該例項

public

static singleton getinstance()

return instance;

}}

「懶漢模式」的優缺點:優點:實現起來比較簡單,當類singletontest被載入的時候,靜態變數static的instance未被建立並分配記憶體空間,當getinstance方法第一次被呼叫時,初始化instance變數,並分配記憶體,因此在某些特定條件下會節約了記憶體。

缺點:在多執行緒環境中,這種實現方法是完全錯誤的,根本不能保證單例的狀態。

單例設計模式 餓漢式和懶漢式

單例設計模式 餓漢式 是執行緒安全的 class person public static person getinstance 單例設計模式 簡潔版 此時person類是單例設計模式,屬於餓漢式 public class test class person 全域性靜態常量 public stati...

設計模式 單例模式 餓漢式和懶漢式

單例模式 單例模式要求類能夠有返回物件乙個引用 同乙個 和乙個獲得該例項的方法 必須是靜態方法,通常使用getinstance這個名稱 單例的實現主要是通過以下步驟 1 將構造方法私有化,使其不能在類的外部通過new關鍵字例項化該類物件。2 在該類內部產生乙個唯一的例項化物件,並且將其封裝為priv...

設計模式 單例模式 餓漢式,懶漢式

餓漢式 將物件的實現提前準備好,物件指向的記憶體只能有乙個。public class singlection1 餓漢式單例實現 將物件的實現提前準備好 private static final singlection1 single1 new singlection1 靜態工廠 public sta...