Criacionais
Estruturais
Comportamentais
DIFCAP
Referências
Créditos



Classificação Estrutural
Conhecido como Wrapper e Translator
Propósito

O principal objetivo do Adapter é 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.

Motivação

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.
Aplicabilidade

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.
Estrutura

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.

Conseqüências
  • 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

      .
  • Desvantagens: -
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

Código

Download aplicativo

Download diagrama

Notas de Aprendizado

A implementação do Adapter normalmente é simples e possui grande material de consulta em livros e na Internet, mas deve-se considerar alguns aspectos importantes na hora da implementação e tomar bastante cuidado. Esses fatores determinaram um tempo maior para pesquisa e estudo (oito dias) e implementação (oito dias).