object pool and factory method