Design patterns are typical solutions to common problemsin software design. Each pattern is like a blueprint that you can customize to solve a particular design problem in your code.
These patterns provide various object creation mechanisms, which increase flexibility and reuse of existing code.
These patterns explain how to assemble objects and classes into larger structures while keeping these structures flexible and efficient.
These patterns are concerned with algorithms and the assignment of responsibilities between objects.