1. 什么是單例模式?
定義: 單例模式是一種創建型設計模式,它確保一個類只有一個實例,并提供一種全局訪問點以訪問該實例。常見的場景包括身份證號碼、政府等需要唯一實例的情況。
單例模式通常用于那些需要在應用程序中僅存在一個實例的情況,例如配置管理器、線程池、數據庫連接池等。通過使用單例模式,可以確保該類的唯一實例在整個應用程序中被共享和使用。
關鍵元素:
- 私有的構造函數,以防止類的直接實例化。
- 私有的靜態成員變量,用于存儲類的唯一實例。
- 一個公共的靜態方法,用于返回類的唯一實例。該方法負責創建實例(如果尚未創建)并返回該實例的引用。
2. 餓漢式與懶漢式區別
-
初始化時機不同:
- 餓漢式: 類加載時立即初始化并創建單例對象。
- 懶漢式: 第一次使用時才會初始化并創建單例對象。
-
線程安全性不同:
- 餓漢式: 類加載時創建單例對象,天生線程安全。
- 懶漢式: 第一次使用時創建單例對象,需要同步控制來保證線程安全。
-
內存占用不同:
- 餓漢式: 類加載時創建單例對象,占用內存較多。
- 懶漢式: 第一次使用時創建單例對象,占用內存相對較少。
餓漢式代碼示例:
public class Singleton_01 {private byte[] data1 = new byte[1024*1024];private byte[] data2 = new byte[1024*1024];private byte[] data3 = new byte[1024*1024];private Singleton_01() { }private static Singleton_01 instance = new Singleton_01();public static