The prototype pattern specifies the kinds of objects to create using a prototypical instance, and creates new objects by copying this prototype. It allows objects to be cloned without knowing their concrete classes. The prototype declares a cloning method that returns a copy of itself. A client creates an object by asking the prototype to clone itself. This pattern avoids subclassing and allows object types to vary at runtime. It is useful when object creation depends on runtime parameters or when classes have a small number of derived forms.