Use the Adapter pattern in Java when clients already have the right contract and a dependency needs translation into it.
The Adapter pattern exists for one narrow, useful reason: the client contract is acceptable, but the dependency contract is not.
That is a common Java problem. A library callback, legacy service, vendor SDK, or framework type exposes methods that do not match what your application wants to depend on. Adapter lets you isolate that mismatch instead of leaking it across the codebase.
In Java, object adapters are usually the default because they work cleanly with composition and do not fight single inheritance. Class adapters still exist, but they are a niche choice.
This section focuses on four practical questions:
Adapter is strong when it protects the application from an awkward dependency. It is weak when it is just a thin alias for methods the rest of the system already understands.