[英]Is there a way to share data between an abstract class and it's implementation classes without using companion object in Kotlin
[英]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.