在Java編程中,單例模式應用廣泛,而其中餓漢模式和懶漢模式則是兩種實現單例模式的常用方式。
簡要介紹一下兩個模式的定義。餓漢模式,在類加載時就已經創建了單例對象,而懶漢模式則是在需要使用時才會實例化并創建對象。下面分別給出兩個模式的Java代碼實現。
// 餓漢模式 public class Singleton { private static Singleton instance = new Singleton(); private Singleton() {} public static Singleton getInstance() { return instance; } }
可以看到,在靜態初始化的時候直接創建了實例對象,并且通過getInstance()方法返回該對象,這個對象是在程序運行之前就創建好的,相對來說比較保險。
// 懶漢模式 public class Singleton { private static Singleton instance; private Singleton() {} public static synchronized Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } }
這里使用了 Singleton 類的 getInstance() 方法,它在第一次調用的時候實例化一個對象,并記錄到 instance 中,以后每次調用時返回這個對象。這種懶漢模式的做法對于那些需要創建對象卻并不馬上使用的類而言比較好,可以避免一些不必要的浪費。
無論是餓漢模式還是懶漢模式,都具有自己的利與弊,需要根據具體情況進行選用。當然,除了這兩個模式,還有雙重檢驗鎖、注冊表模式等方式也可以實現單例模式,同樣可以根據需要選擇適合的方式來實現單例模式。