I recently answered that question:
The entire concept of Design Patterns for software was popularized and maybe invented by the Gang of Four. This is the book. It’s an amazing artifact, organized differently from any other book I’ve seen. It’s worth checking it out from a library and reading at least the introduction and a few designs.
A lot of people say that “design patterns are simply features that are not natively present in the programming language.” And for sure, design patterns grew out of the Smalltalk and C++ communities — the early object-oriented languages.
But to get right to it: a design pattern is nomenclature. It provides names for engineers to use and communicate better. They also provide a set of well known recipes which have evolved over time; they should help people avoid re-inventing the wheel.
Design patterns are recipes for how you use groups of classes, objects and methods. They’re sort of larger chunks of coding habits. For example, OO language supports inheritance. But when should it be used? And what are top-3 most common “patterns” in which we see it show up? Design Patterns, the book, catalogs these. They have names like Template Method, and Strategy.
My knowledge of patterns helps me come up with solutions to complex programming challenges. For example, I want my site to do different things depending on whether the topic is California vs. New York. How should I organize my code containing these specializations? Design patterns give clues.