java - (错误)使用私有(private)构造函数和静态方法(Java)?

标签 java constructor static refactoring private

我目前正在做一个需要重构的项目(不是我写的,原开发者不在身边)。我在那个应用程序中看到相当多的类只有私有(private)构造函数和一个或多个静态方法(当前类对象的 getter/setter)。他们也有非静态方法。我举一个例子:

类 UndoManager 管理对应用程序执行的操作以执行撤消/重做。它只有私有(private)构造函数。加载应用程序时,会调用 UndoManager.setManager()。此方法从文件加载撤消历史记录或使用私有(private)构造函数构造新历史记录。

之后,每个类都可以通过同步的静态方法 .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 和谷歌中搜索了一段时间,但不知何故我没有找到令人满意的答案。感谢您的帮助。

最佳答案

这看起来像一个 singleton pattern . 它是您可能知道的设计模式大家族的一部分。

这样做的目的是确保在整个应用程序中只使用该对象的一个​​实例。事实上,当您调用 getManager() 时,它会在第一次返回一个新实例,而在下一次它会返回之前创建的实例。

关于java - (错误)使用私有(private)构造函数和静态方法(Java)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18308916/

相关文章:

java - 适用于 S3 的 AWS Java 开发工具包中的 SignatureDoesNotMatch

java - Spring R2DBC DatabaseClient 丢失 TZ 信息

java - Selenium - 在另一个类中调用方法,但无法重用驱动程序

java - 如何在程序中使用JDatePicker jar文件

c# - 使用 WCF 服务的多个构造函数调用

java - 如何使用 AssertJ 验证静态方法抛出异常?

java - 我们怎样才能拥有一种基于 JVM 的动态类型语言?

java - 为什么我在设置 boolean 值 : true? 时会得到默认的 false

java - 构造函数可以使用生成器吗

Java构造函数继承?