See
Design Patterns - Elements of Reusable Object-Oriented Software by Erich Gamma et al (
ISBN 0201633612).
The pattern book that started off the use of patterns in software development.
The design patterns are the common solutions to common design problems.