[英]Multiple instances of class with static constructor
我已经使用静态构造函数设计了某种“单一”实现的现有设计。 我希望能够销毁并重新创建新实例。
可以在不更改基础设计的情况下完成此操作吗?
这是简化的原型:
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;
}
}
如果您确定要走这条路,并且不喜欢对每种方法进行null检查,则可以将“销毁”方法更改为“重置”:
public static void reset(){ inst = new ClassA(); }
称之为而不是破坏。
但是,严重的是,不要这样做……花点时间重构这个烂摊子,否则它会再次咬住你!
将以下代码添加到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;
}
doWork
方法应检查null
实例,并抛出IllegalStateException
或创建ClassA
的新实例,然后执行以下逻辑:
public static void doWork(){
if (inst == null){
// throw new IllegalStateException("instance has been destroyed");
// or
inst = new ClassA();
}
// doWork now
}
在doWork
方法中创建一个实例,例如:
private static ClassA inst;
public static void doWork() {
if (inst == null) {
inst = new ClassA();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.