Benefits:
• It reduces coupling.
• It adds flexibility when assigning responsibilities to objects.
• It allows a set of classes to act as one; events produced in one class can be sent to other handler classes within the composition.
Applicable Scenarios:
• More than one object can handle a request and the handler is unknown.
• A request is to be issued to one of several objects and the receiver is not specified explicitly.
• The set of objects able to handle the request is to be specified dynamically.