Design Patterns Elements Of Reusable Object-Oriented Software - Gamma E.; Gamma E.; Helm R.; Johnson R. & Vlissides J. (Pearson, 2016)