繁体   English   中英

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

[英]A way to share data between classes not using singleton

我正在研究在应用程序中使用的库(作为Maven工件)。 在我当前的情况下,库有一个主类,提供了使用它的静态方法。 因此,该库仅允许“一个实例”工作模式。 在工作开始时,有必要向该主类提供Configuration对象。 例如MainClass.start(new Configuration())及更高版本,其他类可通过singleton工厂访问此配置对象。

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

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) ,则可以通过“相同”配置获得相同的MainClass(此处“相同”表示a和b的值相同)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM