Divide an object which needs to be accessed from more than one address space into two interdependent half-objects (one in each address space) with a protocol between them. In each address space, implement whatever functionality is required to interact efficiently with the other objects in that address space. (This may result in duplicated functionality, i.e., implemented in both address spaces.) Define the protocol between the two half-objects so that it co-ordinates the activities of the two half-objects and carries the essential information that needs to be passed between the address spaces.
Patterns which solve the same problem include RemoteProxy (which delegates all requests back to a single site) and CachingProxy? (which caches the results of some requests to reduce delays and network traffic.) RemoteProcedureCall solves the same problem in a different way; it exposes the fact that the target object is in a different address space to the client, which results in client software which "knows" about the distributed nature of the application.