How can I let parts of an application cooperate, even when they exist/run in different runtime environments?
These environments might change over time…
The Broker pattern can be used to structure distributed software systems with decoupled elements that interact by remote service invocations. The broker is responsible for coordinating communication, such as forwarding requests, as well as for transmitting results and exceptions/errors.
Components interact with the broker via stubs and skeletons, that can be automatically generated.
CORBA (common object request broker architecture) is a well-known application of this pattern.
See for example the CORBA website.