https://nitishhsinghhh.medium.com/factory-design-pattern-a-flexible-approach-to-object-creation-757f89da6def