In software engineering, 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.
Design patterns are divided into three fundamental groups:
Behavioral,
Creational, and.
Structural.