建立型設計模式 單例模式的八種寫法

2022-03-11 13:59:06 字數 2805 閱讀 4012

餓漢式:

靜態常量

靜態**塊

懶漢式:

執行緒不安全

執行緒安全,同步方法

執行緒安全,同步**塊

雙重檢查

靜態內部類

列舉需要頻繁建立和銷毀的物件;建立時耗時過多或消耗資源過多,但又經常用到的物件(比如session工廠、資料來源等)

/**

* 設計模式之單例模式

* 餓漢式(靜態常量)

*/public class singletontest01

}class singleton

//定義為常量,保證例項物件不變

private final static singleton instance = new singleton();

//通過此方法獲取例項

public static singleton getinstance()

}

優點:

缺點:

/**

* 設計模式之單例模式

* 餓漢式(靜態**塊寫法)

*/public class singletontest02

}class singleton

//定義為常量,保證例項物件不變

private final static singleton instance;

static

//通過此方法獲取例項

public static singleton getinstance()

}

和靜態常量一致,只不過初始化的位置不同,乙個在靜態**塊,乙個直接在常量宣告處初始化

/**

* 設計模式之單例模式

* 懶漢式(執行緒不安全)

*/public class singletontest03

}class singleton

//宣告例項物件

private static singleton instance;

//通過此方法獲取例項

public static singleton getinstance()

return instance;}}

優點:

缺點:

/**

* 設計模式之單例模式

* 懶漢式(同步方法)

*/public class singletontest04

}class singleton

//宣告例項物件

private static singleton instance;

//通過此方法獲取例項

public static synchronized singleton getinstance()

return instance;}}

雖然解決了執行緒不安全問題,但鎖的範圍太大,效率低,開發中盡量不要使用

/**

* 設計模式之單例模式

* 懶漢式(同步**塊寫法)

*/public class singletontest05

}class singleton

//宣告例項物件

private static singleton instance;

//通過此方法獲取例項

public static singleton getinstance()

}return instance;}}

這種方式將同步鎖縮小了範圍,本意是解決效率問題,但又造成了執行緒不安全,因此開發中不可使用

/**

* 設計模式之單例模式

* 雙重檢查

*/public class singletontest06

}class singleton

//宣告例項物件

private static volatile singleton instance;

//雙重判斷 + 同步鎖

public static singleton getinstance() }}

return instance;}}

既提高了效率也解決了執行緒安全問題,推薦使用這種方法

/**

* 設計模式之單例模式

* 靜態內部類

*/public class singletontest07

}class singleton

//靜態內部類

private static class singletoninstance

//獲取例項

public static singleton getinstance()

}

利用了類載入機制,保證初始化例項時只有乙個執行緒。singleton類被裝載時並不會被例項化,當呼叫getinstance方法時才會裝載singletoninstance

/**

* 設計模式之單例模式

* 列舉

*/public class singletontest08

}enum singleton

不僅能規避執行緒不安全,還能防止反序列化重新建立新的物件

p.s.所有**和筆記均可在 我的github 中獲取,如果對您有幫助的話,可以點個 star 支援一下

設計模式 建立型 單例模式

單例模式在整個軟體開發中還是比較常用的,頻繁使用且過程穩定的方法 全域性變數都可以使用該模式,也可以叫做公共類。單例模式需要遵循要麼出現一次,要麼不出現的規則。單例模式不提供外部例項化功能,在內部自已例項化以保證其唯一例項。具體如下 class common public static common...

設計模式 建立型 單例模式

單例模式 singleton 保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。單例模式劃分 class singleton 獲取本類例項的唯一全域性訪問點 public static singleton getinstance return instance 物件屬於引用資料型別,和基本資料...

設計模式 建立型 單例模式

英文singleton,又稱單件模式。描述 確保類只有乙個例項,並且提供了乙個全域性訪問點。在應用的某些場景,我們只需要類的乙個例項就夠了,並且我們需要在應用的多個地方 客戶 方便的獲取該例項物件。比如應用中的乙個浮動工具欄,或者是乙個資訊收集器 專門收集應用中的操作資訊 等等。優點 方便的控制僅唯...