Design Patterns---Miroarchitectures for Reusable Object-Oriented Software (1994)

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