Proper example of Decorator pattern

Previous example was simply implementing a strategy pattern.

A key problem is that WebService made clear that it did no actual output of its own - it handed it off to 'decorators'.

A decorator should always wrap a class that already has its own complete, self-contained functionality.

In this way, they only enhance / modify it. An instance that is non-decorated should work fully by itself.

Note the distinguishing difference between this and sub-classing - here the enhancement is added dynamically, at runtime, and to one instance.

With sub-classing, the enhancement is added at compile / parse time, and is applied to all instances / uses of the subclass.