在我最初设计它的下面的代码片段中,“下一个数字”需要在应用程序的整个执行过程中发送下一个递增的值。因此,我将课程设为单身。但是,随着需求的最近变化,我需要对“下一个号码”进行重置。我只是添加了一个重置​​方法来做到这一点。但是,它肯定违反了Singleton模式,而且我知道以这种方式初始化静态成员不是一个好主意。

您认为我应该怎么做?

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();
    }
}

最佳答案

为什么这些字段不只是实例变量?这里不需要静态。

reset也不需要同步,除非getNextNumber也是如此。

关于java - 初始化静态成员的单例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4115840/

10-09 02:43