A (software) design pattern is a general solution to a common problem in software design. It is a description or template for how to solve a problem, that can be used in different situations. A design pattern typically shows relationship and interaction between classes or objects, without specifying final application classes or objects that are involved. Patterns identify and specify abstractions that are above the level of single classes and instances.