A software design pattern is a general, reusable solution to a commonly occurring problem within a given context in software design. It is simply a description or a template for how to solve a problem that can be used in many different situations.
The following chart demonstrates all the known software design patterns categorized from a high-level (architectural level) perspective.
Classification
Design patterns were originally grouped into the categories: creational patterns, structural patterns, and behavioral patterns, and described using the concepts of delegation, aggregation, and consultation.
The above diagram provides a greater picture of the overall existing design patterns including those that can be applied from an architectural level of software development.
Benefits
Speeds up the development process by providing tested, proven development paradigms
Reusing design patterns helps to prevent hidden subtle issues that takes time to be detected.
Improves code readability for coders and architects who are familiar with the patterns.
CriticismInappropriate use of patterns may unnecessarily increase complexity.