Holland summarizes extensions to the object model that have been proposed for varying the interface and behavior of an object [9], such as Perspectives [6], Views [20], and Contexts [1]. He notes that the extensions can be characterized in terms of:
Object structure: are interfaces embedded in the structure of objects or layered on top of objects?
Visibility of interface: are clients of an object restricted to using a specific interface or are all interfaces visible?
Ability to define multiple implementations per interface: can an interface have different implementations or is there only one implementation?
Effect on the call site: is the interface selected explicitly at the call site, or implicitly?
Scope of the interface: is the interface defined over many object types or just one?
In the remainder of this section, we compare other proposals for adapting object behavior.