Patterns are proven solutions to common software design problems. They are composed of a context, problem, and solution. Specifically, a pattern describes a recurring design problem in a particular context and presents a generic scheme that has been shown to solve it well. This scheme specifies the components of the solution, their responsibilities, and how they work together. Effective patterns follow a template that outlines their name, context, problem addressed, proposed structure and dynamics of the solution, and examples.