Software design patters document commonly occuring problems and their solution in a certain context.
"Each pattern is a three-part rule, which expresses a relation between a certain context, a certain system of forces which occurs repeatedly in that context, and a certain software configuration which allows these forces to resolve themselves." - Richard Gabriel