The Decorator design pattern solves problems like:
How can responsibilities be added to an object dynamically?
How can the functionality of an object be extended at run-time?
See Applicability section for all problems Decorator can solve. See Solution section for how Decorator solves the problems.