In software development, reuse is The Holy Grail. Reusing existing software artifacts is the most cost-effective way to reduce development time and effort. But code snippets and finished software components are not the only artifacts which can be reused. I am sure you already reuse your prior development experience when facing new challenges. This book is just about that. The Gang of Four (GoF) - as the authors are popularly known - try to record experience in object-oriented design to help developers improve their programming skills. As the book preface says...
As other software development best practices, design patterns help us develop more flexible and maintainable software through the use of well-designed interfaces which encapsulate particular implementations. This book proposes a modular approach which encourages the use of object composition and delegation over class inheritance in order to reduce coupling among classes.
The GoF's book is an essential catalog of object-oriented design templates. Each template or pattern can be used as a starting point to develop new object-oriented software, and also in the process of refactoring (i.e. reorganizing and redesigning) existing software systems. Each pattern in this book abstracts key issues of common design structures, is analyzed in depth and is labeled with a short name in order to facilitate communication among developers. Pattern names broaden our technical vocabulary and make easier for us to discuss possible solutions and their trade-offs.
This book discusses each design pattern in self-contained chapters. Each chapter labels the design pattern, presents the problem it intends to solve, describes its solution, and addresses the consequences which could derive from the use of the design pattern in real systems. Some code snippets (in C++ and Smalltalk) illustrate the inner details of each pattern and references to known uses of each pattern are also included, although you will find that you have probably used most patterns in your best projects.
As stated above, patterns are studied separately, although they are organized into three main categories:
The book organization, its quick index, and its diagrammatic roadmaps make it a worthwhile reference to keep at hand on your favorite shelf. This -now famous- book is the flagship publication of a growing community whose interest in well-designed software complements the traditionally academic focus on software development techniques and methodologies. Methodologies teach us how to solve development projects, design patterns show us elegant solutions to those problems.