我目前正在开发一个需要重构的项目(它不是由我编写的,原始的开发人员不在身边)。我在该应用程序中看到,相当多的类只有私有构造函数和一个或多个静态方法(当前类对象的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和谷歌搜索了一段时间,但不知何故,我没有找到一个令人满意的答案。谢谢你的帮助。
答案 0 :(得分:2)
这看起来像singleton pattern。 它是你可能认识它们的伟大家族设计模式的一部分。
这一点是为了确保在整个应用程序中只使用此对象的一个实例。实际上,当你调用getManager()
时,它将在第一次返回一个新实例,下次它将返回以前创建的实例。
答案 1 :(得分:1)
这是一种名为Singleton的设计模式。它是一个懒惰的负载,例如用于管理器类和服务类。它们适用于您想要实例但只有一个实例的类。
通常有一种方法来获取像getManager
方法这样的实例和像你一样的私有构造函数