public class Elvis {
public static final Elvis INSTANCE = new Elvis();
private Elvis() { /* ... */ }
public static void main(String[] args) {
System.out.println(Elvis.INSTANCE);
}
}
public class Elvis {
private static final Elvis INSTANCE = new Elvis();
private Elvis() { /* ... */ }
public static Elvis getInstance() { return INSTANCE; }
// 多執行緒環境建議加 synchronized
public static synchronized Elvis getInstance() { return INSTANCE; }
public static void main(String[] args) {
System.out.println(Elvis.getInstance());
}
}
確定永遠不需變更策略 → 寫法一
需要彈性、可測試、可擴展 → 寫法二(並加synchronized保執行緒安全)
工廠模式中的 Class Loader 常以 Singleton 實作,因載入的類別本質也是受限資源。