A proxy of a real object is another object that looks from the outside like the real object and is a representative to the outside world. Any operation invoked on/by the real object goes through its proxy. It can perform several tasks: Check with concurrency/access controllers when operations are invoked on/by the real object. It can be the one that decides when NotifyObservers is called. It can also mark changes for out couplers with the various levels and remove marked changes received from in couplers. It can provide a central registry that keeps track of the objects associated with the real object. For instance, it can provide a method that returns the concurrency controller of the real object.
Examples of proxies: Distview proxies, XTV pseudo servers,
COLA adapters.
Generic proxies need to be either generated by the compiler or require
the use of the reflection interface.