The Decorator Design Pattern is a structural pattern in software development that allows behavior to be added to individual objects, either statically or dynamically, without affecting the behavior of other objects from the same class.
The idea of the Decorator Pattern is to wrap an existing class, add other functionality to it, then expose the same interface to the outside world. Because of this our decorator exactly looks like the original class to the people who are using it.
It is used to extend or alter the functionality at runtime. It does this by wrapping them in an object of the decorator class without modifying the original object. So it can be called a wrapper pattern.
Components of Decorator Design Pattern
- Component: It defines the interface of the actual object that needs functionality to be added dynamically to the ConcreteComponents.
- ConcreteComponent: The actual object in which the functionalities could be added dynamically.
- Decorator: This defines the interface for all the dynamic functionalities that can be added to the ConcreteComponent.
- ConcreteDecorator: All the functionalities that can be added to the ConcreteComponent. Each needed functionality will be one ConcreteDecorator class.