design pattern

Design patterns are reusable solutions that can be applied to recurring software design problems. 
Most of the patterns from the GoF book have the following things in common:
* they solve basic design problems, typically using object-oriented paradigm
* people often face these kind problems in arbitrary programs, indecently from the domain or business
* they are recipes for making the code more reusable, often by making it more SOLID
* they present canonical solutions to these problems

The problems solved by these patterns are so basic that many developers understand them mainly as workarounds for missing programming language features (note that the GoF book is from 1995, where Java and C++ did not offer so many features as today).