3.5 Decorator

Often we are deep into the development process when we realize that we need additional functionality in certain types. Instead of going all the way back to square one and adding the functionality to the base class and all the inherited types, we can instead create a new "wrapper" class that contains the additional functionality without changing any of the base type characteristics.