簡體   English   中英

(Mis)使用私有構造函數和靜態方法(Java)?

[英](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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM