https://medium.com/@tripathisaurabh147/decoupling-object-creation-with-the-factory-design-pattern-b17028fcfd98