我正在尝试使用 apache commons pool 创建一个“对象”池。由于我已经有一个对象工厂,它接受一个字符串类型参数并创建一个正确类型的对象,我想使用这个工厂。
但问题是通用池对象的签名都不允许我传递一个带参数的工厂。
//This is a wrapper class that holds an Object pool
Class INService {
private ObjectPool<INConnection> pool_ = null;
/**
* Constructs an instance of INService, given a pool size
* and a class which implements INHandler interface.
* @param poolSize - size of the service pool
* @param c - the class which handles the INHandler service interface.
*/
public INService(int poolSize, String objectType) {
pool_ = new GenericObjectPool<INConnection>(factory, Objecttype); // won't compile.
}
...
}
PoolableObjectfactory 接口定义了 makeObject、destroyObject、validateObject、activateObject 和 passivateObject 等方法。但是没有带参数的 makeObject() 方法。
似乎我能做到这一点的唯一方法是为每种类型的对象编写多个工厂类并编写 if-else 的东西,例如:
public INService(int poolSize, String objectType) {
if (objectType.equals("scap")
pool_ = new GenericObjectPool<INConnection>(scapFactory);
else if (objectType.equals("ucip")
pool_ = new GenericObjectPool<INConnection>(ucipFactory);
...
}
或者,有没有什么优雅的方法,而不是仅仅为了这个而复制/创建几个工厂类?