Gamma et al. (1994)
Gamma E., Helm R., Johnson R. and Vlissides J. (1994)
Design Patterns -- Elements of Reusable Object-Oriented Software
Addison-Wesley