Этот шаблон проектирования легко понять, поскольку реальный мир полон адаптеров. Например, рассмотрим адаптер USB к Ethernet. Он нужен, когда на одном конце у нас есть интерфейс Ethernet, а на другом - USB. Поскольку они несовместимы друг с другом, мы используем адаптер, который преобразует один интерфейс в другой. Этот пример довольно сильно похож на объектно-ориентированные адаптеры.
В объектно-ориентированном проектировании адаптеры используются в тех случаях, когда у нас есть класс (Client), ожидающий определенный тип объекта, и есть объект (Adaptee), предлагающий те же функции, но реализирующий другой интерфейс.
Схема использования адаптера выглядит следующим образом. Клиент делает запрос к адаптеру, вызывает метод, используя целевой интерфейс (Target interface). Адаптер транслирует этот запрос на адаптируемый объект или класс Adaptee, используя интерфейс класса-адаптера. Клиент получает результаты вызова и не знает о присутствии адаптера.
Таким образом, модель адаптера преобразует интерфейс класса в другой интерфейс, который ожидают клиенты. Адаптер позволяет классам работать вместе, когда они не могли бы делать это из-за несовместимости интерфейсов. Для этого адаптер класса использует множественное наследование (в языках, которые поддерживают множественное наследование, например C++) для адаптации одного интерфейса к другому. Либо адаптер объекта реализует целевой интерфейс и применяет композицию (агрегацию) объекта, реализующего адаптируемый интерфейс.В качестве такого объекта также может использоваться объект стороннего или внутреннего сервиса