https://learncsdesigns.medium.com/understanding-the-gang-of-four-gof-design-patterns-using-python-part-2-365db7e4783e