O principal objetivo do Adapter, conhecido como Wrapper e Translator, é facilitar a conversão da interface de uma classe para outra interface mais interessante para o cliente, fazendo com que várias classes possam trabalhar em conjunto independentemente das interfaces originais. Às vezes é preciso modificar uma classe que não pode ser alterada adequadamente devido à falta do código fonte (alguma biblioteca de classes comercial), ou por alguma outra razão. O Adapter é uma das formas de modificar classes nestas circunstâncias, sendo classificado com a de finalidade estrutural e abrange tanto escopo de classe quanto de objeto.
Adapter é usado quando:
• Uma classe já existente e sua interface não combinam com a esperada pelo cliente;
• Se quer criar uma classe reutilizável que coopera com classes não relacionadas ou não previstas, isto é, classes que não necessariamente tenham interfaces compatíveis;
• Se necessita usar várias subclasses existentes, mas é impraticável adaptar suas interfaces fazendo um Subclassing de cada uma.
Use o Padrão Adapter quando:
• Desejar usar uma classe existente e sua interface não corresponde ao que você precisa;
• Desejar criar uma classe reutilizável que coopera com classes imprevistas ou não relacionáveis, isto é, classes que não tem necessariamente interfaces compatíveis.

Figura 1: Estrutura do Padrão de Projeto Adapter
■ Participantes
Cliente: Colabora entre os objetos conforme a interface Alvo.
Alvo: Define a interface de domínio específico que o Cliente utiliza.
Adaptador: Adapta a ClasseExistente para ser utilizada pela classe Alvo.
ClasseExistente: Define uma interface pré-existente que necessita ser adaptada.
■ Vantagens
• Adapta o Adaptador para o Alvo através de uma classe concreta. Como consequência, uma classe adaptada não funcionará para adaptar uma classe e suas subclasses.
• Deixa o Adaptador sobrepor algum comportamento do adaptado, desde que o Adaptador seja uma subclasse do adaptado.
• Introduz um único objeto e nenhum ponteiro adicional é necessário para chegar ao adaptado.
■ Implementação
Usou-se como exemplo (adaptado [Software Design Patterns, 2005]), ilustrado na Figura 2, uma implementação que demonstra o uso de um banco de dados químico legado. Objetos da classe CompostoQuimico acessam o banco de dados através de uma interface que utiliza o Padrão Adapter.
• CompostoQuímico: Define a interface de domínio específico que o cliente utiliza, ou seja, esta classe contém somente o que a classe Tela conhece.
• Composto: Adapta a interface CompostoQuimico para ser utilizada pela classe BDQuimico, para posteriormente os dados sejam mostrados na tela.
• BDQuimico: Define uma interface pré-existente que necessita ser adaptada, neste exemplo ela armazena os dados de cada composto químico, que são acessados e adaptados para a tela cliente.

Figura 2: Exemplo da Aplicação do Padrão de Projeto Adapter