具有静态构造函数的多个类实例

时间:2013-02-04 11:05:31

标签: java

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

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

这是简化的原型:

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 个答案:

答案 0 :(得分:3)

如果您决定沿着这条路走下去,并且不喜欢每种方法的空检查,您可以将“破坏”方法更改为“重置”:

    public static void reset(){
        inst = new ClassA();
    }

调用而不是破坏。

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

答案 1 :(得分:0)

将以下代码添加到doWork方法:

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

OR

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

public static ClassA init()
{
    if(inst == null)
    {
        inst = new ClassA();
    }
    return inst;
}

答案 2 :(得分: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
        }

答案 3 :(得分:0)

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

  private static ClassA inst;
    public static void doWork() {
        if (inst == null) {
            inst = new ClassA();
        }
    }