Better one and a half year late than never:
A base class for decorators of a certain interface is not necessary.
However, it is very useful to have:
-
for one thing, as a means of documenting that classes derived from it are decorators of the interface in question
-
but mostly, because decorators usually do not need to add functionality to every single method of the decorated interface.
So, a base decorator class allows derived decorators to implement only those methods of the interface to which they actually need to add some functionality, leaving the rest of the methods to the base class to provide a default implementation for. (Which simply delegates the call to the decoree.)
Contrast this with writing decorators that implement the decorated interface from scratch, where the compiler requires that you provide an implementation for every single method of the interface, whether your decorator will be adding any functionality to it, or not.
It is that simple, really.