https://www.tellmehow.co/factory-method-creational-design-patterns/factory-method/