Design Patterns: Elements of Reusable Object-Oriented Software by Ralph Johnson,

Capturing a wealth of experience about the design of object-oriented software, four top-notch designers present a catalog of simple and succinct solutions to commonly occurring design problems. The authors begin by describing what patterns are and how they can help you design object-oriented software.

eBay