In software engineering, a design pattern is a general repeatable solution to a commonly occurring problem or situation. A design pattern isn't a finished design that can be transformed directly into code. It is a description or template for how to solve a problem that can be used in a range of different situations.
Uses of Design Patterns
Design patterns can speed up your development by providing tested, proven development paradigms. Effective software design (even in the arts context) requires considering a range of issues that may not become visible until later in the project. Reusing design patterns helps to prevent subtle issues that can cause major problems and improves code readability for coders and architects familiar with the patterns.
In addition, patterns allow developers to communicate using well-known, well understood names for software interactions. Common design patterns can be improved over time, making them more robust than ad-hoc designs.
Further, design patterns (as general solutions) are documented in a format that doesn't require specifics of the particular problem. See Patterns in Java: A Catalog of Reusable Design Patterns for a good set of patterns, documented in the Unified Modeling Language (UML), with examples and implementations in Java. There is also a much less detailed list here, also with examples in Java.
Describing Design Patterns
Design Patterns generally have a common set of elements that make them easy(er) to understand. These may include: name, synopsis, context, solution, benefits, consequences, and examples, to name a few. Again, Patterns in Java: A Catalog of Reusable Design Patterns presents a full-description of these and other elements in the introduction.
Patterns in the arts context (further discussion in class)
- Callbacks and Event-Listeners
- Setup and Draw
- Interface delegates
Adapted in part from www.sourcemaking.com/design_patterns