An overview of common software design patterns that are used to solve recurring architectural problems.