Four designers present a catalog of simple and succinct solutions to commonly occuring design problems. This book shows the role that patterns can play in architecting complex systems. It provides references to a set of well-engineered patterns that the practicing developer can apply to craft specific applications. Each pattern includes code that demonstrates the implementation in object-oriented programming languages such as C++ or Smalltalk.