【发布时间】:2010-11-07 00:02:17
【问题描述】:
在下面我最初设计的代码 sn-p 中,“下一个数字”需要在整个应用程序执行过程中发送下一个递增值。所以我把这个班级变成了单身人士。但是,随着最近要求的一些变化,我需要对“下一个数字”进行重置。我刚刚添加了一个重置方法来做到这一点。但是,它肯定违反了单例模式,而且我知道以这种方式初始化静态成员不是一个好主意。
你觉得我应该怎么做?
public final class GetNextNumber {
private static GetNextNumber instance;
private static Integer nextNumber=1;
private GetNextNumber() {
}
public static synchronized GetNextNumber getInstance() {
if(instance==null){
instance = new GetNextNumber();
}
return instance;
}
protected Integer getNextNumber(){
return nextNumber++;
}
protected synchronized void reset(){
nextNumber=1;
}
public Object clone() throws CloneNotSupportedException {
throw new CloneNotSupportedException();
}
}
【问题讨论】:
-
你不需要那个 clone() 方法。它所做的只是重现默认行为。由于您的课程是最终的并且没有实现 Cloneable ,因此无论如何它都没有任何其他行为。它还使 clone() 公开而不是受保护,在这种情况下是徒劳的。