Nam*_*ess 5 java singleton design-patterns
我有一个Singleton类来保存应用程序模块的状态.这个类只有很多带有setter和getter的类变量:
public class ModuleState{
private static ModuleState instance;
private A a;
private B b;
private C c;
..
..
..
..
private ModuleState (){}
public ModuleState getInstance(){
if(instance==null)
instance=new ModuleState();
return instance;
}
Run Code Online (Sandbox Code Playgroud)
}
在应用程序生命周期的精确时刻,我需要清除模块的状态.我现在做的是通过clearAll()方法重置ModuleState中的所有变量,如下所示:
public void clearAll(){
a=null;
b=null;
c=null;
..
..
}
Run Code Online (Sandbox Code Playgroud)
我的问题如下:有一个更简洁的方法来重置?可能清除单例实例本身,而不重置每个类变量?
这种方法的问题是我可能需要向ModuleState添加一个新的类变量.在这种情况下,我必须记住在clearAll()方法中添加一行来重置新变量.
Tri*_*mon 11
关于什么 ...
public static volatile ModuleState instance = null;
public static void reset() {
instance = new ModuleState();
}
Run Code Online (Sandbox Code Playgroud)
ps:根据下面的讨论:在多线程环境中,同步对实例的访问非常重要,因为允许JVM 缓存其值.您可以使用volatile如上所示.谢谢大家!
干杯!
不,这种方法是完全可以接受的。您当然以某种方式同步对这些状态对象的访问,对吗?否则,您可能会面临有人看到半清除的配置对象的风险。
为了防止将来添加任何额外的状态,您可以做的另一件事是将所有状态存储在 HashMap 中,例如,而不是单个字段。这样,clear()ing hashmap可以确保所有状态都被擦除,并且将来添加任何额外的状态变得更安全
| 归档时间: |
|
| 查看次数: |
15445 次 |
| 最近记录: |