Benefits:
It allows two or more previously incompatible objects to interact.
It allows reusability of existing functionality.
Applicable Scenarios:
An object needs to utilize an existing class with an incompatible interface.
You want to create a reusable class that cooperates with classes that don’t necessarily have compatible interfaces.