Use cases
The decorator pattern shines when used for implementing cross-cutting concerns (j.mp/wikicrosscut). Examples of cross-cutting concerns are as follows:
- Data validation
- Caching
- Logging
- Monitoring
- Debugging
- Business rules
- Encryption
In general, all parts of an application that are generic and can be applied to many different parts of it are considered to be cross-cutting concerns.
Another popular example of using the decorator pattern is graphical user interface (GUI) toolkits. In a GUI toolkit, we want to be able to add features such as borders, shadows, colors, and scrolling to individual components/widgets.
Now, let's move on to the implementation part of the chapter, in which we will see how the decorator pattern helps with memoization.