Keep Java decorators practical by decorating narrow interfaces rather than large concrete types with sprawling method surfaces.
Decorator becomes much more maintainable when the component contract is an interface with a small surface area.
An interface-based component contract:
That is why Java decorators often feel natural around interfaces such as handlers, renderers, repositories, and client abstractions.
If the wrapped type has twenty public methods, every decorator must either:
That is a sign the decoration boundary may be too low-level.
If a decorator is painful to write, the first thing to inspect is usually the component contract. Narrower is usually better.