【发布时间】:2010-11-11 19:24:39
【问题描述】:
我指的是Chapter 2 of Effective Java 中讨论的“服务提供者框架”,这似乎正是处理我遇到的问题的正确方法,我需要在运行时基于@987654322 实例化几个类之一@ 选择哪个服务,以及一个Configuration 对象(本质上是一个 XML sn-p):
但是如何让各个服务提供者(例如,一堆默认提供者 + 一些自定义提供者)注册自己?
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,并将它们分发到一个 jar 中,有没有办法让 registerProvider 被自动调用,或者我使用该算法的客户端程序必须显式调用 FooAlgorithmRegistry.registerProvider()对于他们想要使用的每个类?
【问题讨论】:
标签: java factory service-provider