A design pattern that lets attach additional responsibilities/capabilities to an
object dynamically with subclassing. It is sometimes called a wrapper. Inside the object are references to delegate objects that do
the real work. They can be dynamically replaced. The clients of the class are unaware
of the existence of the delegates. Wrapper methods hide the mechanism. The class just
seems extraordinarily capable flexible and extenable.