A design pattern is a general reusable solution to a commonly occurring problem in software design. Use this tag for questions when you're having problems with the implementation of design-patterns. Please don't use this tag on questions about text pattern matching. When using this tag on implementation heavy questions - tag the code language the implementation is written in.

Source: https://stackoverflow.com/tags/design-patterns/info

In software engineering, a design pattern is a general reusable solution to a commonly occurring problem within a given context in software design.

A design pattern is not a finished design that can be transformed directly into code. It is a description or template for how to solve a problem that can be used in many different situations.

Object-oriented design patterns typically show relationships and interactions between classes or objects, without specifying the final application classes or objects that are involved. Many patterns imply object-orientation or more generally mutable state, and so may not be as applicable in functional programming languages, in which data is immutable or treated as such.

Design patterns are generally described using the Unified Markup Language () - a class diagram is provided which shows the relationship between the components comprising the design pattern. In addition, UML has a sufficiently extensive and expressive vocabulary which helps to describe the details of patterns.

Gang of Four design patterns

Concurrency patterns

Other patterns

Useful links

Books