Source:: Software Design Patterns - Best Practices for Software Developers
Abstract optimal solutions to commonly recurring problems.
They allow us, as developers, to avoid reinventing the wheel.
Each pattern describes a common problem posed in object-oriented software development along with a solution, visualized via class diagrams.
# GoF Design Patterns
Design patterns for object orientated programs are divided into three broad categories: