一种在不使用单例的类之间共享数据的方法

时间:2014-07-11 05:48:15

标签: java

我正在处理应用程序中使用的库(作为Maven工件)。在我目前的情况库中有一个主类,它提供了使用它的静态方法。因此它只允许一个实例"这个库的工作模式。在工作开始时,有必要为此主类提供Configuration对象。例如MainClass.start(new Configuration())以及此配置对象的后来由其他类通过singleton factory访问。

我目前的问题是我需要以允许多实例模式的方式更改库。这样MainClass不再拥有静态方法,并且必须进行实例化。我偶然发现的是,我如何为每个实例提供其唯一的Configuration,其方式是其他类的实例(与当前的MainClass实例一起使用的实例)也可以访问它而不能直接访问它MainClass的实例。当然,在这种情况下,Singleton不是一个解决方案,因为两个或多个MainClass实例应该拥有每个自己的配置。

1 个答案:

答案 0 :(得分:0)

class Configuration{
 String a;
 String b;

 public Configuration(String a, String b){
  this.a = a;
  this.b = b;
 }

 public String getA(){
  return a;
 }

 public String getB(){
  return b;
 }

}


class MainClassFactory{
 private final static MainClassFactory INSTANCE = new MainClassFactory();
 private ConcurrentHashMap<String,MainClass> mainClassMap = new ConcurrentHashMap<String,MainClass>();
 public static getInstance(){
  return INSTANCE;
 }

 public MainClass getMainClass(Configuration config){
  String key = config.getA() +","+ config.getB();
  MainClass mainClass = mainClassMap.get(key);
  if(mainClass == null){
   mainClass = new MainClass(config);
   mainClassMap.put(key,mainClass);
  }
  return mainClass;
 }

}

这会对你有帮助吗?

假设MainClass实例化Configuration 然后通过调用MainClassFactory.getInstance().getMainClass(config),您将能够通过&#34;相同的&#34;获得相同的MainClass。配置(&#34;相同&#34;这里表示a和b的值相同)

这个想法很简单:使用一个键可以表示Configuration的特征,并使用带有此键的Map缓存MainClass。 最后在提供具有相同特征的配置时返回相同的对象;