Adapter (tamén chamado wrapper ou adaptador) e un padrón de deseño estrutural que serve para transformar unha interface noutra compatible coa clase na que se quere utilizar.[1]
Algunhas veces unha clase deseñada para ser reusada non pode selo por que a súa interface non coincide coa interface específica que require unha determinada aplicación. Un adaptador permite as clases traballar conxuntamente con normalidade. O adaptador traduce as chamadas a súa interface en chamadas o interface orixinal, e a cantidade de código necesario para facelo é habitualmente pequeno. O adaptador é tamén responsable de transformar as chamadas. Un exemplo disto sería que unha clase proporcionase valores booleanos na forma de cadeas “true” ou ”false” pero a clase dende a que se vai utilizar necesite eses valores en formato 1 e 0, desta forma a clase adaptadora realizaría o cambio.
Temos dúas posibles opcións a hora de abordar este padrón:
public class Adaptado
{
public void peticionEspecifica()
{
System.out.println("Peticion especifica Herdanza Multiple...");
}
}
public interface Obxetivo
{
public void peticion();
}
public class Adaptador extends Adaptado implements Obxetivo
{
public void peticion()
{
peticionEspecifica();
}
}
public class Cliente
{
public static void main (String[] arg)
{
Obxetivo Adr = new Adaptador();
Adr.peticion();
}
}
public class Adaptado
{
public void peticionEspecifica()
{
System.out.println("Peticion especifica Composicion...");
}
}
public interface Obxetivo
{
public void peticion();
}
public class Adaptador implements Obxetivo
{
private Adaptado _adaptado;
public Adaptador (Adaptado a)
{
_adaptado = a;
}
public void peticion()
{
_adaptado.peticionEspecifica();
}
}
public class Cliente
{
public static void main (String[] arg)
{
Adaptado Ado = new Adaptado();
Obxetivo Adr = new Adaptador(Ado);
Adr.peticion();
}
}
No seguinte exemplo queremos que unha clase cliente sexa capaz de comprobar o estado dunha rede de auga e de electricidade nun determinado punto.
Para a enquisa da electricidade dispoñemos dun método ao que poderíamos chamar directamente dende a comprobación da electricidade. No caso da auga só dispoñemos dun método getNivel, que nos da o nivel de auga nese momento. Deberemos comprobar nós se o nivel é o adecuado para determinar que a comprobación é certa.
É neste punto onde se introduce o padrón adaptador, para permitir a comprobación en base aos valores proporcionados pola outra clase.