單例模式實現的方式:
1、惡漢式:類載入到記憶體後,就例項化乙個例項,jvm保障線程安全(簡單實用,推薦)。(
缺點:不管用到與否類裝載時就完成例項化)
2、懶漢式:雖然達到了初始化的目的,但是執行緒不安全
解決方式:
①、通過synchronized修飾,但是效率會下降;
②、通過synchronized修飾減少同步**塊的方式,但是效率會下降;
③、雙重校驗
3、靜態內部類方式:jvm保障線程安全(載入外部類的時候不會載入內部類)
4、列舉類的方式:不僅可以解決執行緒同步的問題,還可以防止反序列化
1、惡漢式:
public
class
singleton_001_evilman
public
static singleton_001_evilman getinstance()
private
singleton_001_evilman()
public
void
show()
public
static
void
main
(string[
] args)
}
執行結果:
2、懶漢式:
public
class
singleton_002_lazyman
// ①、通過synchronized修飾,但是效率會下降
public
static
/*synchronized*/ singleton_002_lazyman getinstance()
catch
(interruptedexception e)
instance =
newsingleton_002_lazyman()
;}}}
return instance;
}public
void
show()
public
static
void
main
(string[
] args)
}}
執行結果:
3、靜態內部類方式:
public
class
singleton_003_staticinternalclass
private
static
class
singleton_003_staticinternalclassholder
public
static singleton_003_staticinternalclass getinstance()
public
static
void
show()
public
static
void
main
(string[
] args)).
start()
;}}}
執行結果:
4、列舉類
public
enum singleton_004 ).
start()
;}}}
執行結果:
設計模式之單例模式學習
單例模式是一種物件建立型模式,使用單例模式可以保證乙個類只生成唯一的例項物件。也就是說,在整個程式空間中,該類只存在乙個例項物件。gof對單例模式的定義是 保證乙個類 只有乙個例項存在,同時提供能對該例項加以訪問的全域性訪問方法。在應用系統開發中,我們常常有以下需求 單例模式有二種實現方式,餓漢式和...
設計模式學習記錄 4 單例模式
單例模式要求實現的目標 保持乙個類有且僅有乙個例項,單例模式一般會採用延遲載入的模式 public class singlethreadedsingleton public static singlethreadsingleton getinstance return instance public...
設計模式學習記錄(一)單例模式
package designpatterns.singletonmode 單例模式 餓漢式 建立物件例項時直接初始化 用空間換時間 author fengx date 2020 12 27 public class hungrysingletonmode 2 建立該型別的私有靜態例項 private...