A Design Pattern is a reusable solution template for a recurring software-design problem.
Design patterns give teams shared vocabulary for tradeoffs in object creation, structure, behavior, integration, and maintainability.
Related concepts include Software Architecture and Architectural Pattern.