The Decorator design pattern provides a solution:
Define separate Decorator objects that add responsibilities to an object.
Work through Decorator objects to extend the functionality of an object at run-time.
Describing the Decorator design in more detail is the theme of the following sections.
See Applicability section for all problems Decorator can solve.