O documento descreve o padrão de projeto Adapter, que permite que classes com interfaces incompatíveis trabalhem juntas através de um adaptador. O adaptador converte a interface de uma classe para que ela possa ser usada por clientes esperando uma interface diferente. Um exemplo mostra como um adaptador permite que objetos Turkey sejam usados no lugar de objetos Duck, apesar de terem interfaces diferentes.
4. Solução
Fazendo uma analogia, podemos dizer que o adaptador muda
a interface da tomada para algo parecido com o que seu
conector espera encontrar.
Mas como utilizar adaptadores em Orientação a Objetos?
5. Adaptadores orientados a objetos
Digamos que você tenha que encaixar uma nova biblioteca de classes,
adquirida de outro fornecedor, em um sistema já existente, mas as
interfaces projetadas por esse novo fornecedor sejam diferentes das
adotadas pelo fornecedor anterior...
6. Adaptadores orientados a objetos
Você não quer resolver o problema mudando o código existente e
nem mudar o código do fornecedor, então, escreva uma classe que
adapte a interface do novo fornecedor ao formato que o sistema
espera encontrar...
7. Adaptadores orientados a objetos
O adaptador funciona como um intermediário, recebendo as
solicitações do cliente e convertendo-as para um formato que faça
sentido para as classes do novo fornecedor.
8. Padrão Adapter
Para exemplo, será utilizado o exemplo de patos utilizado no
Capitulo 1 do livro Use a Cabeça Padrões de Projetos (vide
referencias bibliográficas)...
11. Padrão Adapter
Agora digamos que alguns objetos Duck estejam em falta e você
queira usar objetos Turkey em seu lugar. Os perus tem uma interface
diferente, logo não podemos utiliza-los do jeito que estão...
Portanto, vamos escrever um Adaptador
13. Padrão Adapter
Agora que você sabe o que é um adaptador, vamos voltar e analisar
novamente suas peças...
14. Padrão Adapter
O cliente faz uma solicitação ao adaptador chamando um método
nele através da interface alvo...
15. Padrão Adapter
O adaptador traduz a solicitação para uma ou mais chamadas de
métodos no adaptado usando a interface desse objeto...
16. Padrão Adapter
O cliente recebe os resultados da chamada sem jamais perceber que
há um adaptador fazendo a tradução...
17. Exercício
Uma empresa vende somente carros, seu sistema implementa
a classe interface Carro
public interface Carro{
public void quatroRodas();
public void Volante();
}
18. Exercício
Um exemplo de venda é o Fusca
public class Fusca implements Carro{
public void quatroRodas(){
System.ou.println("4 rodas ok");
}
public void Volante(){
System.ou.println("volante ok");
}
}
19. Exercício
A empresa começa a vendar motos, e ganha de seu
fornecedor um sistema pronto.
Adapte a interface Moto para a interface Carro
public interface Moto{
public void duasRodas();
public void guidao();
}
public class cg125 implements Moto{
public void duasRodas(){
System.ou.println("2 rodas ok");
}
public void guidao(){
System.ou.println("guidao ok");
}
}
20. Exercício - Solução
public class cg125Adapter implements Carro{
Moto moto;
public cg125Adapter(){
this.moto = moto;
}
public void quatroRodas(Moto moto){
moto.duasRodas();
}
public void Volante(){
moto.guidao();
}
}