https://michaelsusanto81.medium.com/refactoring-design-pattern-improve-your-code-quality-62beb7c89104