Decorator (Proxy-Wrapper)
Where extension by subclassing is impractical.
Where responsibilities are to be added/withdrawn.
Where the base class should be extensible with additional properties.
Embellishment of objects from most GUI toolkits (e.g. text attributes: font, size, style). I/O classes, streams, filters.
Responsibilities can be added and/or removed at run-time.
Avoids subclass “explosion”.
Recursive nesting allows for multiple responsibilities.