apresentaodesignpatterns1 110109115005-phpapp02

Post on 28-Jun-2015

238 Views

Category:

Self Improvement

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

Learn a bir more about design patterns.

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