• 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