Decorator

Attach additional responsibilities to an object dynamically. Decorators provide a
flexible alternative to subclassing for extended functionality.
Applicability
- Need to add responsibilities to objects dynamically and transparently.
- Need to withdraw responsibilities
- Need to support large combinations of responsibilities without a class explosion.
Consequences
- More flexible than static inheritance
- Avoids feature-laden classes high up in the hierarchy
- A decorator and its comonent aren't identical
- Lots of little objects!