Files
_scripts
abstract-document
abstract-factory
adapter
aggregator-microservices
api-gateway
async-method-invocation
bridge
builder
business-delegate
caching
callback
chain
command
composite
dao
data-mapper
decorator
delegation
dependency-injection
double-checked-locking
double-dispatch
etc
src
README.md
pom.xml
event-aggregator
event-asynchronous
event-driven-architecture
execute-around
facade
factory-kit
factory-method
feature-toggle
fluentinterface
flux
flyweight
front-controller
half-sync-half-async
hexagonal
intercepting-filter
interpreter
iterator
layers
lazy-loading
mediator
memento
message-channel
model-view-controller
model-view-presenter
monad
monostate
multiton
mute-idiom
mutex
naked-objects
null-object
object-mother
object-pool
observer
page-object
poison-pill
private-class-data
producer-consumer
promise
property
prototype
proxy
publish-subscribe
reactor
reader-writer-lock
repository
resource-acquisition-is-initialization
semaphore
servant
service-layer
service-locator
singleton
specification
state
step-builder
strategy
template-method
thread-pool
tolerant-reader
twin
value-object
visitor
.gitignore
.travis.yml
CODE_COVERAGE.md
CONTRIBUTING.MD
LICENSE.md
README.md
checkstyle-suppressions.xml
checkstyle.xml
exclude-pmd.properties
faq.md
pom.xml
update-ghpages.sh
java-design-patterns/double-dispatch/README.md

28 lines
801 B
Markdown
Raw Normal View History

---
layout: pattern
title: Double Dispatch
folder: double-dispatch
permalink: /patterns/double-dispatch/
pumlid: NSbB3iCW303HgpG70Ezx6yTOWSeOv4zp_MRTtUZDCPGa6wV9gqTiVmCOtlKQqVDCPwEbmHgLreGXUMEWmGU_M1hxkBHiZ61JXud-1BILft1fmvz37JZetshQh3kd_000
categories: Other
2015-12-28 15:52:44 +02:00
tags:
- Java
- Difficulty-Intermediate
- Idiom
---
## Intent
Double Dispatch pattern is a way to create maintainable dynamic
behavior based on receiver and parameter types.
![alt text](./etc/double-dispatch.png "Double Dispatch")
## Applicability
Use the Double Dispatch pattern when
* the dynamic behavior is not defined only based on receiving object's type but also on the receiving method's parameter type.
## Real world examples
* [ObjectOutputStream](https://docs.oracle.com/javase/8/docs/api/java/io/ObjectOutputStream.html)