0

我有一种带有静态构造函数的“单例”实现的现有设计。我希望能够销毁并重新创建新实例。

这可以在不改变基础设计的情况下完成吗?

这是简化的原型:

public static void main(String[] args) {
     ClassA.doWork();
     ClassA.destruct();

     ClassA.doWork(); // <--I need new instance here
}

public class ClassA {
    private static ClassA inst = new ClassA();
    protected ClassA() {
        //init      
    }   
    public static void doWork(){
        //do work
    }   
    public static void destruct(){
        inst = null;
    }
}
4

4 回答 4

3

如果您决定走这条路,并且不喜欢对每个方法进行空检查,您可以将“destruct”方法更改为“reset”:

    公共静态无效重置(){
        inst = new ClassA();
    }

调用它而不是破坏。

但是,说真的,不要这样做......现在花时间重构这个烂摊子,否则它会回来咬你!

于 2013-02-04T11:19:32.723 回答
0

在方法中添加以下代码doWork

public static void doWork()
{
    if(inst == null)
    {
        inst = new ClassA();
    }
    //do work
}  

或者

添加一个单独的方法来创建实例,(类似于你必须如何销毁)

public static ClassA init()
{
    if(inst == null)
    {
        inst = new ClassA();
    }
    return inst;
}
于 2013-02-04T11:11:11.313 回答
0

在方法中创建一个实例,doWork例如:

  private static ClassA inst;
    public static void doWork() {
        if (inst == null) {
            inst = new ClassA();
        }
    }
于 2013-02-04T11:14:43.387 回答
0

该方法doWork应该检查null实例并抛出一个IllegalStateException或创建一个新实例,ClassA然后执行以下逻辑:

        public static void doWork(){
            if (inst == null){
                // throw new IllegalStateException("instance has been destroyed");
                // or
                inst = new ClassA();
            }
            // doWork now
        }
于 2013-02-04T11:11:39.793 回答