Software design patterns provide solutions to problems such as creating objects that require complex initialization or need to establish communication between objects. In addition, patterns define approaches to composing objects or building an inheritance hierarchy to obtain new functionality.
There are three types of design patterns:
- Creational
- Behavioral
- Structural
The following diagram shows the most common patterns, divided by groups: