O documento descreve o padrão de projeto adaptador, que converte a interface de uma classe para outra interface compatível com o cliente. Ele permite que classes com interfaces incompatíveis trabalhem juntas. O documento fornece um exemplo de um adaptador que converte uma classe Peru para uma interface Pato, de modo que um Peru possa ser usado onde um Pato é esperado.
2. Padrão adaptador Se resume em converter uma interface de uma classe para outra interface que o cliente espera encontrar. O adaptador permite que classes com interfaces incompatíveis trabalhem juntas.
7. public class PeruComumimplements Peru { @Override publicvoid gorgolejar() { System.out.println("Glu - Glu"); } @Override publicvoidfly() { System.out.println("Peru comum voando"); } }
8. publicclassPeruAdaptadorimplements Pato { private Peru peru; publicPeruAdaptador(Peru peru) { this.peru = peru; } @Override publicvoidquack() { peru.gorgolejar(); } @Override publicvoidfly() { for (int i = 0; i < 5; i++) { peru.fly(); } } }
9. publicclassPatoTest { public static void main(String[] args) { PatoBravopatoBravo = newPatoBravo(); PeruComumperuComum= newPeruComum(); Pato peruAdaptado = newPeruAdaptador(peruComum); System.out.println("Testando peru comum"); peruComum.gorgolejar(); peruComum.fly(); System.out.println("Testando o pato bravo"); testPato(patoBravo); System.out.println("Testando o peru disfarçado de pato"); testPato(peruAdaptado); staticvoidtestPato(Pato pato){ pato.quack(); pato.fly();}
10. Testando peru adaptado Glu - Glu Peru adaptado Testando o pato bravo Quack Fly Testando o peru disfarçado de pato Glu - Glu Peru adaptado Peru adaptado Peru adaptado Peru adaptado Peru adaptado
11. Existe também o adaptador de classes, porem não é possível utiliza-lo com o java. O motivo é que ele requer herança multipla, o que até então ainda não é possível no java. A principal diferença é que ao invés de utilizar a composição como faz o adaptador de objetos, o adaptador de classes utiliza a herança, assim podendo ter acesso as chamadas do métodos.