With all of the substitution patterns, the principle is that the proxied target doesn't need to be aware of the proxying object. That's pretty achievable if what you're trying to do is provide a local proxy to a remote object. However, when you're using a decorator, things get a bit trickier. Welcome to the "leaking this" problem. To start with an easy example, what if the target does this: return this; What do you do? Well, it's not obvious, but typically you'll get the decorator to return itself. This case...