4. Subclasse de Pato
PatoSelvagem.java
public class PatoSelvagem implements Pato {
public void grasnar() {
System.out.println("Quack");
}
public void voar() {
System.out.println("Estou voando");
}
}
6. Subclasse de Peru
PeruSelvagem
public class PeruSelvagem implements Peru {
public void gorgolejar() {
System.out.println("Glu! Glu!");
}
public void voar() {
System.out.println(
"Estou voando uma pequena distância");
}
}
7. Problemas
Em uma determinada situação você precisa de
um objeto Peru em tempo de execução ao
invés de um Pato
Pontos favoráveis
Você já tem seu sistema orientado a interface e não
para implementação
Suas variáveis de referência são do tipo da interface
Pato
8. PeruAdapter
public class PeruAdapter implements Pato {
Peru peru;
public PeruAdapter(Peru peru) {
this.peru = peru;
}
public void grasnar() {
peru.gorgolejar();
}
public void voar() {
for (int i = 0; i < 5; i++) {
peru.voar();
}
}
}
9. Teste para Pato e Peru
public class PatoTeste {
public static void testarPato(Pato p) {
p.grasnar();
p.voar();
}
public static void main(String[] args) {
PatoSelvagem pato = new PatoSelvagem();
PeruSelvagem peru = new PeruSelvagem();
Pato peruAdaptado = new PeruAdapter(peru);
System.out.println("O peru faz...");
peru.gorgolejar();
peru.voar();
System.out.println("nO pato faz...");
testarPato(pato);
System.out.println("nO Peru Adaptado faz...");
testarPato(peruAdaptado);
}
}
10. Explicando o Adapter
Um cliente implementado para uma
interface específica (interface-alvo)
requisicao()
Cliente
A
d
a
p
t
a
d
o
Adaptador
Interface alvo
Interface adaptada
O adaptador implementa
a interface-alvo e possui uma
instância do adaptado
11. Explicando
O Cliente faz uma solicitação ao adaptador
chamando um método dele através da
interface alvo
O adaptador traduz a solicitação para uma ou
mais chamadas de métodos no adaptado
usando a interface desse objeto
O cliente recebe os resultados da chamada
sem jamais perceber que há um adaptador
fazendo a tradução
12. +1 Padrão
ADAPTER
O Padrão Adapter converte a interface de
uma classe em outra que o cliente espera. O
Adapter permite que classes com interfaces
incompatíveis trabalhem em conjunto – o
que de outra forma seria impossível.
21. EnumerationIterator.java
public class EnumerationIterator implements Iterator{
Enumeration enumeration;
public EnumerationIterator(Enumeration enumeration) {
this.enumeration = enumeration;
}
public boolean hasNext() {
return enumeration.hasMoreElements();
}
public Object next() {
return enumeration.nextElement();
}
public void remove() {
throw new UnsupportedOperationException();
}
}
22. Participantes
Target (Alvo)
Define a interface específica que o Client usa
Client
Colabora com objetos compatíveis com a interface
Target
Adaptee (Objeto a ser adaptado)
Define uma interface existente que necessita ser
adaptada
Adapter
Adapta a interface do Adaptee à interface do
Target
23. Aplicabilidade
Necessidade de usar uma classe existente, mas sua
interface não corresponde à interface necessária
Necessidade de criar uma classe reutilizável com
classes não relacionadas ou não previstas, ou seja,
classes que não necessariamente possuam interfaces
compatíveis
Necessidade de usar várias subclasses existentes,
porém, for impraticável adaptar estas interfaces
criando subclasses para cada uma. Um adaptador
pode adaptar a interface da sua classe mãe
24. Colaborações
Os clientes chamam operações em uma
instância de Adapter
Por sua vez, o Adapter chama operações de
Adaptee que executam a solicitação