Elements of Reusable Object-Oriented Software
Erich Gamma, Richard, Helm, Ralph Johnson, John Vlissides
Includes bibliography and index