Prototype
19 Mar 2022Intent
Specify the kinds of objects to create using a prototypical instance, and create new objects by copying this prototype.
Applicability
Use the prototype pattern when:
- A system should be independent of how it's products are created, composed, and represented.
- When the classes to instantiate are specified at run-time, e.g. dynamic loading.
- To avoid building a class hierarchy of factories that parallels the class hierarchy of products.
- When isntances of a class can have one of only a few different combinations of state.
Structure
Participants
- Prototype: declares an interface for cloning itself
- ConcretePrototype: implements an operation for clonin itself
- Client: creates a new object by asking a prototype to clone itself
Collaborations
A client asks a prototype to clone itself.
Consequences
Prototype has mant of the same consequences that Abstract Factory and Builder have: it hides the concrete product classes from client, thereby reducing the number of names clients know about. Moreover, these patterns let a client work with application-specific classes without modification. Additional benefits include:
- Adding and removing products at run-time.
- Specifying new objects by varying values.
- Specifying new objects by varying structure.
- Reduced subclassing
- Configuring an application with classes dynamically.
Sample Code
Related Patterns
- Prototype and Abstract Factory are competing patterns in some way.
- Designs that make heavy use of the Composite and Decorator patterns often can benefit from Prototype as well.