https://javascript.plainenglish.io/mastering-design-patterns-in-javascript-part-2-the-factory-pattern-6a0c96295c01