https://medium.com/@bhargavamandapati/understanding-design-patterns-a-comprehensive-guide-26ff3f0ec527