通過枚舉來實現(xiàn)單例

枚舉單例的實現(xiàn)方法:

class Resource{} 
public enum SomeThing {    
    INSTANCE;    
private Resource instance;    
    SomeThing() {        
    instance = new Resource();   
    }    
public Resource getInstance() {       
    return instance;    
}

上面的類Resource是我們要應用單例模式的資源,具體可以表現(xiàn)為網(wǎng)絡連接,數(shù)據(jù)庫連接,線程池等等。
獲取資源的方式很簡單,只要#SomeThing.INSTANCE.getInstance() 即可獲得所要實例。下面我們來看看單例是如何被保證的:
首先,在枚舉中我們明確了構造方法限制為私有,在我們訪問枚舉實例時會執(zhí)行構造方法,同時每個枚舉實例都是static final類型的,也就表明只能被實例化一次。在調用構造方法時,我們的單例被實例化。
也就是說,因為enum中的實例被保證只會被實例化一次,所以我們的INSTANCE也被保證實例化一次。
可以看到,枚舉實現(xiàn)單例還是比較簡單的,除此之外我們再來看一下Enum這個類的聲明:

public abstract class Enum<E extends Enum<E>>
        implements Comparable<E>, Serializable

可以看到,枚舉也提供了序列化機制。某些情況,比如我們要通過網(wǎng)絡傳輸一個數(shù)據(jù)庫連接的句柄,會提供很多幫助。
最后借用 《Effective Java》一書中的話,

單元素的枚舉類型已經(jīng)成為實現(xiàn)Singleton的最佳方法。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 這是16年5月份編輯的一份比較雜亂適合自己觀看的學習記錄文檔,今天18年5月份再次想寫文章,發(fā)現(xiàn)簡書還為我保存起的...
    Jenaral閱讀 3,146評論 2 9
  • 單例模式(SingletonPattern)一般被認為是最簡單、最易理解的設計模式,也因為它的簡潔易懂,是項目中最...
    成熱了閱讀 4,545評論 4 34
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,628評論 19 139
  • 前言 本文主要參考 那些年,我們一起寫過的“單例模式”。 何為單例模式? 顧名思義,單例模式就是保證一個類僅有一個...
    tandeneck閱讀 2,630評論 1 8
  • 【郭郭宇宇 20171010 《一封陌生女人的來信》D2】 不得不說的是,用跟誰學聽帶讀,還真挺方便的,加速1.2...
    蜂蜜辣椒汁閱讀 145評論 0 0

友情鏈接更多精彩內容