# When to use which design pattern

In software engineering, a **design pattern** is a general repeatable solution to a commonly occurring problem in software design. A design pattern isn't 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.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1681941403470/e2af449d-e105-4094-9ac0-b4e51c1c1931.jpeg align="center")

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1681941413127/6c4a9b81-934d-4767-8e7c-e8118560a188.jpeg align="center")
