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