Files
abstract-factory
adapter
async-method-invocation
bridge
builder
business-delegate
caching
callback
chain
command
composite
dao
decorator
dependency-injection
double-checked-locking
double-dispatch
event-aggregator
execute-around
facade
factory-method
fluentinterface
flux
flyweight
front-controller
half-sync-half-async
intercepting-filter
interpreter
iterator
layers
lazy-loading
mediator
memento
message-channel
model-view-controller
model-view-presenter
monostate
multiton
naked-objects
null-object
object-pool
observer
poison-pill
private-class-data
producer-consumer
property
prototype
etc
src
index.md
pom.xml
proxy
publish-subscribe
reactor
repository
resource-acquisition-is-initialization
servant
service-layer
service-locator
singleton
specification
state
step-builder
strategy
template-method
thread-pool
tolerant-reader
twin
visitor
.gitignore
.travis.yml
CODE_COVERAGE.md
LICENSE.md
README.md
checkstyle.xml
faq.md
pom.xml
update-ghpages.sh
java-design-patterns/prototype/index.md

1.2 KiB

layout, title, folder, permalink, categories, tags
layout title folder permalink categories tags
pattern Prototype prototype /patterns/prototype/ Creational
Java
Gang Of Four

Intent: Specify the kinds of objects to create using a prototypical instance, and create new objects by copying this prototype.

alt text

Applicability: Use the Prototype pattern when a system should be independent of how its products are created, composed and represented; and

  • when the classes to instantiate are specified at run-time, for example, by dynamic loading; or
  • to avoid building a class hierarchy of factories that parallels the class hierarchy of products; or
  • when instances of a class can have one of only a few different combinations of state. It may be more convenient to install a corresponding number of prototypes and clone them rather than instantiating the class manually, each time with the appropriate state

Real world examples:

Credits