始終如一 單例模式分析總結

2021-10-06 07:13:06 字數 1189 閱讀 6045

顧名思議,單例,單一例項,就是在程式執行期間確保某乙個類只有乙個例項,一般稱其為singleton類。

既然只能有乙個例項,那麼肯定不能讓程式執行期間隨時都能new出乙個例項,所以將建構函式私有化,通過在類內部自行例項化乙個物件,並且通過getinstance()方法,向外部提供這個例項。

public class singleton ;

//通過此方法獲取唯一例項

public static singleton getsingleton()

//類中其他方法

public static void dosomething()

}

「懶漢式」單例,在最開始不例項化物件,到後期執行需要時再例項化並返回,顯得很「懶」

為了實現懶漢式的執行緒安全,需要加鎖

public class singleton ;

//通過此方法獲取唯一例項

//如果是單執行緒,不需要加鎖,多執行緒則需要

public static synchronized singleton getsingleton()

return singleton;

}//類中其他方法

public static void dosomething()

}

為什麼需要加鎖?

在高併發的情況下,假如執行緒a執行到了singleton = new singleton(),但是因為物件還在初始化,所以還沒有獲取物件,在此期間,執行緒b執行到singleton == null,此時判定為真,那麼執行緒b也會去例項化物件,造成記憶體**現了兩個例項,所以多執行緒情況下需要加鎖。

1. 減少記憶體開支

2.減少系統效能開銷

3.避免對資源的多重占用

4.優化和資源共享訪問

1.一般沒有介面,擴充套件困難

2.對測試不友好,在並行開發中,如果單例模式沒有完成,不能進行測試

3.與單一職責原則衝突,單例模式「單例」和業務邏輯融合在了乙個類中

1.要求生成唯一序列號的環境

2.整個專案共享的訪問點或者資料

3.需要定義大量的靜態變數和靜態方法的環境,此時也可以直接宣告為static  

八年始終如一,瑞成工業為中國工業發展賦能

乙個國家的發展,離不開堅實的工業產業的支撐。瑞成工業八年來始終堅持發展進步,為中國工業產業的進步注入堅實力量。沐浴著時代的春風,中國工業產業保持持續進步,在全球範圍內做大做強 做優做精。瑞成工業在這樣的環境下以高要求 高標準嚴格約束自身,為全方位推動中國工業產業高質量的發展 進步奠定堅實基礎。用旗下...

單例模式總結

三種實現單例模式的對比 1.volatile關鍵字不但可以防止指令重排,也可以保證執行緒訪問的變數值是 主記憶體中的最新值 有關volatile的詳細原理,我在以後的漫畫中會專門講解。2.使用列舉實現的單例模式,不但可以防止利用反射強行構建單例物件 可以而且在列舉類物件被 反序列化 的時候,保證反序...

單例模式總結

單例模式的使用有乙個必要的條件,在乙個系統要求乙個類只有乙個例項時才應當使用單例模式。在懶漢式單例的時候為什麼要進行執行緒的控制呢?package 單例模式.懶漢模式 public class lazysingleton synchronized public lazysingleton getin...