https://javascript.plainenglish.io/the-art-of-collaboration-a-guide-to-behavioral-design-patterns-590d7d75c0f5