Decorator Pattern Guide
Extend object behavior dynamically by wrapping objects with decorators. Unlike inheritance, decorators can be combined at runtime to create flexible combinations of behavior without class explosion.
Usage
Ask about implementing decorators, building decorator chains, or using decorators to add cross-cutting concerns like logging and caching.
Examples
- "How do I add logging to my service without modifying it?"
- "Implement a caching decorator for my repository"
- "What is the difference between decorator pattern and middleware?"
Guidelines
- Decorators should implement the same interface as the object they wrap
- Keep each decorator focused on a single responsibility
- Be mindful of decorator ordering — it affects behavior
- Use decorators for cross-cutting concerns like logging, caching, and retry
- Prefer composition with decorators over deep inheritance hierarchies