Я пытаюсь использовать пул apache commons для создания пула «объектов». Поскольку у меня уже есть фабрика объектов, которая принимает аргумент строкового типа и создает правильный тип объекта, я хочу использовать эту фабрику.
Но проблема в том, что ни одна из подписей универсального объекта пула не позволяет мне передать фабрику, которая принимает аргументы.
//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, activObject и 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);
...
}
Или есть какой-нибудь элегантный способ вместо дублирования/создания нескольких фабричных классов только для этого?