Design patterns are language independent mechanisms for providing solutions to common problems. Adhering to design patterns help in creating systems that are robust, scalable and maintainable as design patterns follow best practices and established standards. Design patterns have existed in non software engineering disciplines for a long time. Mechanical engineers reuse proven standard design models when designing a new kind of lathe machine. Instead, they reuse existing designs.