
• Inheritance is not always flexible.
• Composition and delegation is sometimes a good alternative to dynamically add new behavior.
• Decorator type matches component type.
• Decorators change component behavior without changing the component code.
• A component may have arbitrary number of decorators.
• Decorators are transparent to the client, unless the client depends on a particular component.
RULE: Open classes for extension and close for changes.