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
source or
machine code. It is a description or template for how to solve a problem that can be used in many different situations. Patterns are formalized
best practices that the programmer can use to solve common problems when designing an application or system.
Object-oriented design patterns typically show relationships and
interactions between
classes or
objects, without specifying the final application classes or objects that are involved. Patterns that imply mutable state may be unsuited for
functional programming languages, some patterns can be rendered unnecessary in languages that have built-in support for solving the problem they are trying to solve, and object-oriented patterns are not necessarily suitable for non-object-oriented languages.