我指的是在讨论“服务提供商框架” 有效的Java的第2章 ,这似乎是正好来处理我有一个问题的正确方法,在这里我需要实例几类在运行时的一个,基于一个String
选择哪个服务,和一个Configuration
对象(实质上是一个XML片段):
但我怎么得到个性化的服务提供者(如一堆默认提供+一些自定义商)自行注册?
interface FooAlgorithm
{
/* methods particular to this class of algorithms */
}
interface FooAlgorithmProvider
{
public FooAlgorithm getAlgorithm(Configuration c);
}
class FooAlgorithmRegistry
{
private FooAlgorithmRegistry() {}
static private final Map<String, FooAlgorithmProvider> directory =
new HashMap<String, FooAlgorithmProvider>();
static public FooAlgorithmProvider getProvider(String name)
{
return directory.get(serviceName);
}
static public boolean registerProvider(String name,
FooAlgorithmProvider provider)
{
if (directory.containsKey(name))
return false;
directory.put(name, provider);
return true;
}
}
例如,如果我写的自定义类MyFooAlgorithm和MyFooAlgorithmProvider实施FooAlgorithm,和我在一个罐子里散发出来,有没有什么办法让registerProvider被自动调用,或将使用该算法我的客户端程序必须显式调用FooAlgorithmRegistry.registerProvider( )他们想要使用的每个类?