用私有構造器或枚舉類型強化Singleton屬性(3)

一、Singleton 表明那些本質上惟一的系統組件、增長客戶端調試難度性能

二、Singleton 實現方法1:調試

  • 構造器保持私有
  • 導出公有靜態成員
  • 享有特權的的客戶端,採用AccessibleObject.setAccessible(),經過反射機制調用 私有構造器
  • 解決上述問題:能夠修改構造器,建立第二個對象拋異常

好處是:對象

  • 類成員很清晰看出是單例

三、Singleton 實現方法 2:接口

  • 構造器保持私有
  • 導出公有靜態成員
  • 享有特權的的客戶端,採用AccessibleObject.setAccessible(),經過反射機制調用 私有構造器

好處是:序列化

  • JVM都能實現,靜態工廠調用內聯化,無性能劣勢
  • 更加靈活,易於修改
  •  

四、可序列化(Serializable)反射

  • 僅僅實現接口是不夠的
  • 必須說明全部實例域都是瞬時的(transient)
  • 必須提供readResolve() 方法
  • 不然,每次反序列化時都會建立新實例(以下,返回同一個實例)

五、Singleton 實現方法 3:方法

  • 只包含單個元素的枚舉類型
  • 實現 Singleton 最佳方法
  • 更加簡潔
  • 無償提供序列化機制
  • 絕對防止屢次實例化

相關文章
相關標籤/搜索