我正在处理应用程序中使用的库(作为Maven工件)。在我目前的情况库中有一个主类,它提供了使用它的静态方法。因此它只允许一个实例"这个库的工作模式。在工作开始时,有必要为此主类提供Configuration
对象。例如MainClass.start(new Configuration())
以及此配置对象的后来由其他类通过singleton factory访问。
我目前的问题是我需要以允许多实例模式的方式更改库。这样MainClass
不再拥有静态方法,并且必须进行实例化。我偶然发现的是,我如何为每个实例提供其唯一的Configuration
,其方式是其他类的实例(与当前的MainClass实例一起使用的实例)也可以访问它而不能直接访问它MainClass的实例。当然,在这种情况下,Singleton不是一个解决方案,因为两个或多个MainClass
实例应该拥有每个自己的配置。
答案 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
。
最后在提供具有相同特征的配置时返回相同的对象;