Design pattern: It is a general reusable solution to a normally occurring problem in software design. A design pattern is not finished design which can be transformed directly into code. It is explanation or template for how to solve out a problem which can be used in several distinct situations. Object-oriented design patterns typically illustrate relationships and interactions between classes or objects, without indicating the final application classes or objects which are involved.