Prototype

Specify the kinds of objects to create using a prototypical instance, and create new
object by copying this prototype.
Applicability
- Need to specify classes to instantiate at run time
- Need to avoid building parallel class hierarchies for factories and products
- When instances of a class can have only a few different combinations of state
Consequences
- Hides concrete classes from the client
- Allows adding and removing products at run-time
- Allows specifying new object "types" by varying values or structure
- Can reduce subclassing
- Dynamic configuation of an application's classes