So, following the "window" example in the Decorator link helpfully provided above, if I wanted to change a VerticalScrollBarDecorator object to a HorizontalScrollBarDecorator object, I would use the former as the type Window parameter in the constructor of the latter, and I now have a HorizontalScrollBarDecorator object. Crucially, though, this changed object is still a Window implementation with all associated state.
Only problem I see here is that if I make a ton of changes, I'll have a string of past identities -- VerticalScrollBarDecorator, HorizontalScrollBarDecorator, etc. -- that can't be GC'd.
(Essentially, I'm looking to model a 'becomes-a' relationship.)