A design pattern is an attempt to fulfill reoccuring design requirements by reusing solutions which have been solved time and time again. In fact, one could almost look upon design patterns as a standard arsenal that every programmer should have in his skill set.
Although the concept is not exactly new in it basic form - reusing stable code has been the skill of many programmer, design patterns attempt to essentially standardize the pratice for common challenges.
Design patterns are broken down into groups according to the type of general problem they solve.
| Pattern | Summary | Examples |
| Behavioral Patterns | allow communication between objects | state, command |
| Creational Patterns | object creation | singleton, class factories |
| Concurrency Patterns | solve concurrency issues, locking | thread pool, io |
| Fundamental Patterns | patterns general in nature | interface, delegate |
| Structural Patterns | create relationships between objects | bridge, proxy |