Gamma et al. (1994)

Gamma E., Helm R., Johnson R. and Vlissides J. (1994)

Design Patterns -- Elements of Reusable Object-Oriented Software

Addison-Wesley