What is a Design Pattern?

I'm a passionate Software Engineer developing highly scalable and robust web applications using object-oriented programming techniques and design patterns, with hands-on experience including methodologies and best practices like Continuous Integration and Delivery, Clean Code, Test-Driven Development, Refactoring, N-tier Systems and Cloud based Distributed Applications under the Microservice Architecture.
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
Constructor
Factory
Abstract
Prototype
Singleton
Builder
Structural Design Patterns
Decorator
Facade
Flyweight
Adapter
Proxy
Behavioral Design Patterns
Iterator
Mediator
Observer
Visitor






