Decorators have three primary capabilities: They can replace the value that is being decorated with a matching value that has the same semantics. (e.g. a decorator can replace a method with another method, a field with another field, a class with another class, and so on). They can provide access to the value that is being decorated via accessor functions which they can then choose to share. They