The Decorator pattern enables you to add or remove object functionality without changing the external appearance or function of the object.
It changes the functionality of an object in a way that is transparent to its clients by using an instance of a subclass of the original class that delegates operations to the original object.
The Decorator pattern attaches additional responsibilities to an object dynamically to provide a flexible alternative to changing object functionality without using static inheritance
The following lists the benefits of using the Decorator pattern:
- More flexibility than static inheritance.
- Avoids feature-laden classes high up in the hierarchy
- Simplifies coding because you write a series of classes, each targeted at a specific part of the functionality, rather than coding all behavior into the object
- Enhances the object's extensibility because you make changes by coding new classes.