Adapter
Where an existing interface doesn’t match.
Where reusable abstraction is needed that works with unrelated classes.
Any OO class that has to work with an external, old or vendor class.
For adapting external gui classes to internal models.
Objects are decoupled and more reusable.
Better reuse of external classes while maintaining protection from dependencies.