Java中的單例模式是一種常見的設(shè)計模式。在單例模式中,一個類只能有一個實例對象,這樣可以保證該對象在系統(tǒng)中唯一,從而更好地管理和控制。
在Java中,餓漢和懶漢是兩種常見的單例模式實現(xiàn)方式。
// 餓漢模式 public class Singleton { // 創(chuàng)建一個靜態(tài)實例對象,即類初始化時就創(chuàng)建一個實例化對象 private static Singleton instance = new Singleton(); // 將構(gòu)造函數(shù)設(shè)置為private,這樣類外部不可實例化 private Singleton() {} // 提供一個靜態(tài)方法,返回實例對象 public static Singleton getInstance() { return instance; } } // 懶漢模式 public class Singleton { // 聲明一個靜態(tài)實例對象,但不初始化 private static Singleton instance = null; // 將構(gòu)造函數(shù)設(shè)置為private,這樣類外部不可實例化 private Singleton() {} // 提供一個靜態(tài)方法,返回實例對象 public static Singleton getInstance() { // 當實例對象為null時,進行初始化 if (instance == null) { instance = new Singleton(); } return instance; } }
餓漢模式的優(yōu)點在于,實現(xiàn)簡單,線程安全。因為實例化對象是在類加載時進行的,因此任何時候都只有一個實例對象存在。
懶漢模式的優(yōu)點在于,實現(xiàn)懶加載(延遲加載),只有在需要時才進行實例化。當訪問量很大時,可以節(jié)約內(nèi)存和資源。
然而,懶漢模式也存在一些問題。如果不對線程進行控制,在多線程情況下使用懶漢模式會出現(xiàn)線程安全問題,導(dǎo)致多次實例化對象。因此,可以使用synchronized或者雙重檢驗鎖來保證線程安全性。