Intent
Decouple an abstraction from its implementation so that the two can vary
independently.
Applicability
- decouple implementation from interface
- implementation needs to change dynamically
- nested generalizations, support for extensibility in multiple dimensions
Structure
[to do: diagram with Client, Abstraction, Implementation]
Consequences
- implementation decoupled from abstraction
- implementation can be changed at runtime
- cost of indirection
Implementation
- configuring abstraction with implementation
- weak vs. strong implementation coupling
- strong coupling: implementation knows abstraction *back pointer)
Uses in JHotDraw