Я думаю обджект пул должен работать примерно так:
синглтон
1 пул на 1 тип объекта
лимит на максимальное число объектов
запрашиваешь объект: отдает один из свободных, или создает новый, если свободных нет
возвращаешь объект: складывает в свободные, если не превышен лимит, иначе выкидывает
Я и сделал один пул на 1 тип объекта, или ты про то, что может быть один и тот же тип, но разные назначения?