3、用私有構造器或者列舉型別強化SIngleton屬性
結論
單元素的列舉型別已經成為實現Singleton的最佳方法
Singleton模式
常見的Singleton有兩種方式,第一種:
public class Elvis {
//被定義為final的,不可改變的
public static final Elvis INSTANCE = new Elvis();
private Elvis() {
}
public void leaveTheBuilding() {
System.out.println("Whoa baby, I'm outta here!");
}
// This code would normally appear outside the class!
public static void main(String[] args) {
Elvis elvis = Elvis.INSTANCE;
elvis.leaveTheBuilding();
}
}
第二種方式:
public class Elvis {
private static final Elvis INSTANCE = new Elvis();
private Elvis() {
}
//定義為靜態方法
public static Elvis getInstance() {
return INSTANCE;
}
public void leaveTheBuilding() {
System.out.println("Whoa baby, I'm outta here!");
}
// This code would normally appear outside the class!
public static void main(String[] args) {
Elvis elvis = Elvis.getInstance();
elvis.leaveTheBuilding();
}
}
讓Singleton變成可序列化的
為了讓反序列化的時候只建立一個物件
public class Elvis {
public static final Elvis INSTANCE = new Elvis();
private Elvis() {
}
public void leaveTheBuilding() {
System.out.println("Whoa baby, I'm outta here!");
}
private Object readResolve() {
// Return the one true Elvis and let the garbage collector
// take care of the Elvis impersonator.
return INSTANCE;
}
// This code would normally appear outside the class!
public static void main(String[] args) {
Elvis elvis = Elvis.INSTANCE;
elvis.leaveTheBuilding();
}
}
使用列舉實現單例模式
無償提供了序列化的機制,絕對防止多次例項化
public enum Elvis {
INSTANCE;
public void leaveTheBuilding() {
System.out.println("Whoa baby, I'm outta here!");
}
// This code would normally appear outside the class!
public static void main(String[] args) {
Elvis elvis = Elvis.INSTANCE;
elvis.leaveTheBuilding();
}
}
相關文章
- 建議:用私有構造器或者列舉型別強化Singleton屬性。型別
- Effective Java筆記第一章建立和銷燬物件第三節用私有構造器或者列舉型別強化Singleton屬性Java筆記物件型別
- Effective Java - 構造器私有、列舉和單例Java單例
- 列舉型別型別
- ENUM列舉型別型別
- java列舉型別Java型別
- java 列舉型別Java型別
- odoo欄位屬性列舉Odoo
- Java雙屬性列舉使用Java
- 屬性列舉法(轉載)
- javascript基礎(物件,物件屬性,屬性基本和引用資料型別,字面量建立物件,垃圾回收,屬性的列舉)(十三)JavaScript物件資料型別
- C#例項構造器,型別構造器 -筆記型別筆記
- 私有屬性
- 【C++】構造資料型別--陣列C++資料型別陣列
- 深度分析 Java 的列舉型別:列舉的執行緒安全性及序列化問題Java型別執行緒
- Java - Enum 列舉型別Java型別
- css3瀏覽器私有屬性字首使用詳解CSSS3瀏覽器
- 常用的瀏覽器私有屬性瀏覽器
- javascript哪些屬性是可列舉的JavaScript
- js可列舉屬性的遍歷JS
- 【四】使用列舉和結構來建立值型別型別
- [C++]結構體、共同體和列舉型別C++結構體型別
- PLC結構化文字(ST)——變數型別和變數屬性變數型別
- java中的列舉型別Java型別
- JavaSE基礎:列舉型別Java型別
- mysql之ENUM列舉型別MySql型別
- 【C++】資料型別-列舉型C++資料型別
- TypeScript 中列舉型別的理解?應用場景?TypeScript型別
- JavaScript私有屬性和靜態屬性JavaScript
- 結構體-簡單列舉型別——植物與顏色結構體型別
- 資料結構複習-01enum列舉型別資料結構型別
- C++ 列舉型別介紹C++型別
- 列舉型別分享 第五節型別
- java基礎(十一) 列舉型別Java型別
- Python 中的列舉型別Python型別
- 列舉型別與位運算型別
- 10-列舉型別和流型別
- 關於C++列舉型別C++型別