Adapter

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

 

 


Associação SoftwareLivre

A Associação SoftwareLivre.org (ASL) é uma associação civil sem fins-lucrativos, com sede em Porto Alegre/RS que reúne empresários, profissionais liberais, estudantes e servidores públicos, estabelecendo relações com os mais diversos setores da sociedade como o poder público, universidades, empresas, grupos de usuários, hackers e ONGs. A ASL tem por principal objetivo tornar o software livre amplamente incluído na sociedade, propiciando espaço de discussão, apoio, fomento e organização de iniciativas nas mais diversas áreas relacionadas. - Site oficial da associação