A design pattern is a reusable solution that can be applied to commonly occurring problems in software development, think of them as templates for solving problems.
They're proven solutions that can be easily reused and provide solid approaches to solve issues in software development, they usually are an out-of-the-box solution that can be adapted to suit our own needs.
It's important to remember that they're not an exact solution, their function is to provide us with a solution scheme.
Design Patterns can be divided into several categories, we're going to dig into some of them and look at the most commonly used ones. For the examples, I'm going to use PHP, but the logic can be applied to any existing OOP language.
Creational Design Patterns
Structural Design Patterns
Behavioral Design Patterns