serve as a tool to communicate ideas, solutions, and knowledge about commonly recurring design problems.
a description of a problem and its solution that you can apply to many similar programming situations
This example is paraphrase.