在Java中跨类共享变量(持久性和并发性无关紧要)
我需要在许多类中共享大量变量。到目前为止,我一直在这些类之间传递一个映射作为参数,但这变得很乏味。我唯一能想到的其他方法是bean,这是一种过度杀伤力,因为我不需要持久性,一个数据库,出于同样的原因,这也是一种过度杀伤力,以及以下两种方法。(请注意,并发性不是本项目的问题。)在单例方法和接口方法之间,您建议使用哪种方法?为什么?你知道另一种方法吗?我想有更好的方法来做我正在尝试的事情。我的主要要求是可靠性和效率。在简单的测试中,以下两种方法都满足我的要求,但我不知道它们的可扩展性有多好。多谢
方法1(单例):
package development;
import java.util.TreeMap;
import java.util.Map;
public class Param {
private Map<Object, Object> params = new TreeMap<Object, Object>();
private final static Param param = new Param();
private Param() { System.out.println("<instantiated params>"); };
public static Param getInstance() {
return param;
}
public void addParam(Object k, Object v) {
params.put(k, v);
}
public void removeParam(Object k) {
params.remove(k);
}
public Object getParam(Object k) {
return params.get(k);
}
public void printParams() {
for(Map.Entry<Object, Object> kv : params.entrySet()) {
System.out.println(kv.getKey() + "->" + kv.getValue());
}
}
}
package development;
public class Tester {
public void doTest() {
Param.getInstance().addParam("Key 1", "Value 1");
Param.getInstance().addParam("Key 2", "Value 2");
Param.getInstance().addParam("Key 3", "Value 3");
new C1().addAParam();
new C2().addAParam();
new C3().addAParam();
Param.getInstance().printParams();
}
public static void main(String[] args) {
new Tester().doTest();
}
private class C1 {
public void addAParam() {
Param.getInstance().addParam("Key 4", "Value 4");
}
}
private class C2 {
public void addAParam() {
Param.getInstance().addParam("Key 5", "Value 5");
}
}
private class C3 {
public void addAParam() {
Param.getInstance().addParam("Key 6", "Value 6");
}
}
}
Result:
<instantiated params>
Key 1->Value 1
Key 2->Value 2
Key 3->Value 3
Key 4->Value 4
Key 5->Value 5
Key 6->Value 6
方法2(接口):
package development;
import java.util.HashMap;
import java.util.Map;
public interface IParam {
Map<Object, Object> params = new HashMap<Object, Object>();
}
package development;
import java.util.Map;
public class Tester2 {
public void doTest() {
IParam.params.put("Key 1", "Value 1");
IParam.params.put("Key 2", "Value 2");
IParam.params.put("Key 3", "Value 3");
new C1().addAParam();
new C2().addAParam();
new C3().addAParam();
for(Map.Entry<Object, Object> kv : IParam.params.entrySet()) {
System.out.println(kv.getKey() + "->" + kv.getValue());
}
}
public static void main(String[] args) {
new Tester2().doTest();
}
private class C1 {
public void addAParam() {
IParam.params.put("Key 4", "Value 4");
}
}
private class C2 {
public void addAParam() {
IParam.params.put("Key 5", "Value 5");
}
}
private class C3 {
public void addAParam() {
IParam.params.put("Key 6", "Value 6");
}
}
}
Result:
Key 1->Value 1
Key 2->Value 2
Key 3->Value 3
Key 4->Value 4
Key 5->Value 5
Key 6->Value 6
共 (0) 个答案