https://www.spacecmdtech.com/gang-of-four-gof-design-patterns/