apresentaodesignpatterns1 110109115005-phpapp02
Post on 28-Jun-2015
238 Views
Preview:
DESCRIPTION
TRANSCRIPT
Design Patterns
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.
Classe A Adaptador Classe B
public interface Pato {
public void quack();
public void fly();
}
public class PatoBravo implements Pato {
@Overridepublic void quack() {
System.out.println("Quack");}
@Overridepublic void fly() {
System.out.println("Fly");}
}
public interface Peru {
public void gorgolejar();
public void fly();}
public class PeruComum implements Peru {
@Overridepublic void gorgolejar() {System.out.println("Glu - Glu");}
@Overridepublic void fly() {System.out.println("Peru comum voando");}
}
public class PeruAdaptador implements Pato {
private Peru peru;
public PeruAdaptador(Peru peru) {
this.peru = peru;
}
@Override
public void quack() {
peru.gorgolejar();
}
@Override
public void fly() {
for (int i = 0; i < 5; i++) {
peru.fly();
}
}
}
public class PatoTest {
public static void main(String[] args) {PatoBravo patoBravo = new PatoBravo();
PeruComum peruComum = new PeruComum();Pato peruAdaptado = new PeruAdaptador(peruComum);
System.out.println("Testando peru comum");peruComum.gorgolejar();peruComum.fly();
System.out.println("\nTestando o pato bravo");testPato(patoBravo);
System.out.println("\nTestando o peru disfarçado de pato");testPato(peruAdaptado);
static void testPato(Pato pato){pato.quack();pato.fly();}
Testando peru adaptadoGlu - GluPeru adaptado
Testando o pato bravoQuackFly
Testando o peru disfarçado de patoGlu - GluPeru adaptadoPeru adaptadoPeru adaptadoPeru adaptadoPeru adaptado
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.
Adaptadores do mundo real
EnumerationhasMoreElements()nextElement()
IteratorhasNext()next()remove()
public class EnumerationIterator implements Iterator<Object> {private Enumeration<Object> enumeration;
public EnumerationIterator(Enumeration<Object> enumeration) this.enumeration = enumeration;
@Overridepublic boolean hasNext() return enumeration.hasMoreElements();
@Overridepublic Object next() return enumeration.nextElement();
@Overridepublic void remove() {throw new UnsupportedOperationException();
}
Obrigado !
top related