Implement Factory Method pattern, Object Pool and Singleton + tests