我目前正在做一个需要重构的项目(不是我写的,原开发者不在身边)。我在那个应用程序中看到相当多的类只有私有(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/