This document presents the object pool design pattern. The object pool pattern creates and manages a group of objects (the pool) that can be reused to avoid the cost of creating new objects. When an object is needed, it is pulled from the pool rather than creating a new instance. The object is returned to the pool when it is no longer needed so it can be reused again later. The object pool pattern satisfies the single responsibility principle by having the pool class solely manage the object lifecycle and handling concurrency issues. It is useful when there are a limited number of expensive to create objects that will be needed repeatedly.