Prototype
Intent
Specify the kinds of objects to create using a prototypical instance, and create
new objects by copying the prototype
Applicability
- to avoid building a class hierarchy of factories that parallels the class hierarchy of products
- when the classes to instantiate are specified at run-time
- objects need to be created in a preconfigured state