Design Pattens: Elements of Reusable Object-Oriented Software (1995)

by E Gamma, R Helm, R Johnson, J Vlissides