https://medium.com/@tejeswar_79802/mastering-the-factory-method-in-creational-design-patterns-29e718129bd8