Design Patterns are a set of reusable solutions to commonly occurring problems in software design. They are not a finished design that we can transform directly into code but rather a guide for solving problems.
The goal of using Design Patterns is to increase the efficiency and effectiveness of software development and provide a common vocabulary for developers to discuss design solutions.