https://medium.com/@estebanthi/book-review-design-patterns-elements-of-reusable-object-oriented-software-7fe965b7cf8