A design pattern is a predefined solution to a recurring object-oriented design problem. The design pattern defines a relationship between collaborating interfaces, classes, and objects, each with a unique role that helps solve the problem. An interface defines a group of property and method signatures. A class defines an implementation of the interfaces it supports. An object is constructed based on a class; therefore, an object supports the interfaces implemented by its class. Furthermore, interaction with an object is possible only through the interfaces exposed by that object. Object-oriented systems are based on objects. Clearly, then, design patterns are an abstraction of a solution to a problem in a specified context. Objects constructed based on classes defined by a design pattern are instances of the design pattern solution.