Design Patterns are general, reusable solutions to commonly occurring problems within in given context in software design.