[英](Mis)usage of private constructor and static methods (Java)?
我目前正在開發一個需要重構的項目(它不是由我編寫的,原始的開發人員不在身邊)。 我在該應用程序中看到,相當多的類只有私有構造函數和一個或多個靜態方法(當前類對象的getter / setter)。 他們也有非靜態方法。 我舉個例子:
類UndoManager,用於管理在應用程序上執行撤消/重做的操作。 它只有私人構造函數。 加載應用程序時,將調用UndoManager.setManager()。 此方法從文件加載撤消歷史記錄,或使用私有構造函數構造新的歷史記錄。
之后,每個類都可以使用syngronized靜態方法.getManager()訪問此UndoManager實例。
在代碼中:
public class UndoManager extends SimpleObservable<UndoManager> {
private static UndoManager instance;
private final Stack<Action> undoHistory;
private final Stack<Action> redoHistory;
public synchronized static void setManager(UndoManager undoManager) {
UndoManager instance = getManager();
instance.clear();
instance.undoHistory.addAll(undoManager.undoHistory);
instance.redoHistory.addAll(undoManager.redoHistory);
instance.notifyObservers(instance);
}
public synchronized static UndoManager getManager() {
if (instance == null)
instance = new UndoManager();
return instance;
}
private UndoManager() {
this.undoHistory = new Stack<Action>();
this.redoHistory = new Stack<Action>();
}
/.../
}
在這個應用程序中,使用了多個類。 它們不是輔助類,而是應該只有一個實例的類。
我的問題是:這種訪問風格好嗎? 如果沒有,你將如何重構課程並獲得訪問權限?
我很抱歉,如果它是重復的,但我已經在stackoverflow和谷歌搜索了一段時間,但不知何故,我沒有找到一個令人滿意的答案。 感謝您的任何幫助。
這看起來像一個單身人士模式 。 它是您可能了解的大型設計模式的一部分。
這一點是為了確保在整個應用程序中只使用此對象的一個實例。 實際上,當你調用getManager()
,它將在第一次返回一個新實例,下一次它將返回以前創建的實例。
這是一種名為Singleton的設計模式。 它是一個懶惰的負載,例如用於管理器類和服務類。 它們適用於您想要實例但只有一個實例的類。
通常有一種獲取實例的方法,如getManager
方法和私有構造函數
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.