- Objects that wrap around other objects to add useful features are decorators
- Why not inheritance? Well, it needs a compile time choice of parent
- Why not sub-classing? Sometimes a large number of independent extensions to a class are possible and would lead to an explosive number of sub-classes to support all the extensions
- Each decorates has a HAS-A relationship with the component it’s decorating
- Decorators and components have the same interface
- Ex: Adding designs, borders and scrollbars to GUI controls