我有一些使用静态构造函数的“单例”实现的设计。 我希望能够销毁并重新创建新实例。
这可以在不改变基础设计的情况下完成吗?
这是简化的原型:
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;
}
}
答案 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();
}
}