This section provides an overview of what design-patterns is, and why a developer might want to use it. Examples may provide a graphical representation of the pattern, a scenario consisting of a problem given a context in which a pattern can be used and mention possible trade offs.
It should also mention any large subjects within design-patterns, and link out to the related topics. Since the Documentation for design-patterns is new, you may need to create initial versions of those related topics.
According to Wikipedia:
[A] software design pattern is a general reusable solution to a commonly occurring problem within a given context in software design. It is not a finished design that can be transformed directly into source or machine code. It is a description or template for how to solve a problem that can be used in many different situations. Design patterns are formalized best practices that the programmer can use to solve common problems when designing an application or system.
There are many recognized software design patterns, and new ones are proposed on a regular basis. Other topics cover many of the most common patterns, and the Wikipedia article provides a more extensive list.
Similarly, there are different ways to classify design patterns, but the original classification is:
- Creational patterns: Factory, Builder, Singleton, etc.
- Structural patterns: Adapter, Composite, Proxy, etc.
- Behavioral patterns: Iterator, Strategy, Visitor, etc.
- Concurrency patterns: ActiveObject, Monitor, etc.
The idea of design patterns has been extended to domain-specific design patterns for domains such as user interface design, data visualization, secure design, web design and business model design.
Finally, there is a related concept called a software architecture pattern which is described as being the analogue for design patterns applied to software architectures.