https://mysteryweevil.medium.com/the-power-of-patterns-a-beginners-guide-to-javascript-design-patterns-9c6665592291