Sometimes, the creation of objects may be so complex that it can affect the application performance. Consider, for example, when the creation of an object requires a call across the network to a remote API or when the object's setup need expensive computational resources. Also, the frequent creation and destruction of objects may affect the overall performance, since the garbage collector is frequently involved.
In these situations, it would be better to extend the object's life as much as possible. In other words, we may maintain an object alive instead of discarding it when a client no longer needs it. Here, we can use the object pool pattern.
The object pool pattern involves the following actors: