我不確定,如果有人問過這個問題(如果真是道歉)。突變對象爲單身?
從維基百科複製的代碼。
public class Singleton {
private static final Singleton instance = new Singleton();
private Singleton() {}
public static Singleton getInstance() {
return instance;
}
}
線程安全性如何?是(僅),因爲這個類沒有變異狀態?
如果我修改它像這樣
public class Singleton {
private static final Singleton instance = new Singleton();
private FancyClass obj1;
private FancyClass obj2;
//feel free to imagine all the getters and setters for obj1 and obj2,
// like getObj1() and so forth
//tricky method
public void doSomething() {
obj1.destroyEnemy();
obj2.destroyFriend();
}
private Singleton() {
obj1 = null;
obj2 = null;
}
public static Singleton getInstance() {
return instance;
}
}
我對設計模式的討論沒有興趣發生了什麼,這是什麼樣的代碼,我應該維護。是上面的'singleton'線程安全的,假設FancyClass是java標準庫類。
既然你讓你的構造函數是私人的,它永遠不會被調用。所以宣佈它是空的沒有任何意義。無論如何,實例變量會自動分配默認值。 –
@AniketThakur是的,這是超級愚蠢的(在構造函數中初始化爲null)。我只是重寫了一個沒有具體細節的現有課程。 – fedvasu
請注意,調用'synchronized'將不會使需要多個方法調用的操作變爲線程安全。 「synchronized」「get」方法通常毫無意義。 (ObComment:可變靜態是一個非常糟糕的主意。) –