Design Patterns are a software engineering concept describing recurring solutions to common problems in software design. The authors Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides are often referred to as the GoF, or Gang of Four. The site explores the capabilities and pitfalls of object-oriented programming and describes several software design patterns. Part of the appeal of design patterns is that they can be used uniformly over many different languages and syntaxes. The basic structure stays the same; only the details change. It is easy to take a pattern implemented in Java and convert it to C++. Historically the
Design Patterns
- have been locked in the heads of the experts or
- buried deep in the source code.
What is required is a principled means of extracting, documenting, conveying, applying, and preserving this design experience without undue time and effort.
A pattern must explain why a particular situation causes problems and why the proposed solution is considered a good one. Common design problems arise from "conflicting forces" such as the conflict between breaking the speed of sound and preventing the aircraft from disintegrating. These values, used by the pattern's author to determine which solution is "best", must also be documented within the pattern. A pattern must also explain when it is applicable. Since two houses may be very different from one another, a design pattern for houses must be broad enough to apply to both of them, but not so vague that it doesn't help the designer make decisions. The range of situations in which a pattern can be used is called its context. Some examples might be "all houses", "all two-story houses", or "all places where people spend time". The context must be documented within the pattern.
This website is about design patterns that describes simple and elegant solutions to specific problems in
object-oriented software design. Design patterns capture solutions that have developed and evolved overtime and they are not the designs people tend to generate initially. They reflect untold redesign and recoding as developers have struggled for greater reuse and flexibility in their software.
The origins of object oriented design is debated, but the first languages that supported OO were Simula and SmallTalk. The site includes code examples in C++ and Java.
Design patterns capture these solutions in a succinct and easily applied form.
The design patterns do not require.
- unusual language features or
- amazing programming techniques.
All can be implemented in standard
object-oriented languages, though they might take a little more effort than ad hoc solutions.
Once you understand the
design patterns and have had a revelation with them, you will not think about object-oriented design in the same way and will have insights that can make your own designs more flexible, modular and reusable.