Design Patterns
Elements of Reusable Object-Oriented Software
ISBN: 978-0201633610
This book was one of the early books on software patterns. It explains what a software design pattern is, and introduces a small collection of patterns, which appear to be successful in solving various common problems.
Importantly it cites Christopher Alexander's work on architectural patterns, and perhaps stays closer to that than software patterns have since - where there is a temptation to produce pattern libraries complete with code, and while this does include code, it's there to illustrate, not to be a rigid implementation.
