apresentaodesignpatterns1 110109115005-phpapp02

14
Design Patterns

Upload: nadia-rodrigues

Post on 28-Jun-2015

235 views

Category:

Self Improvement


0 download

DESCRIPTION

Learn a bir more about design patterns.

TRANSCRIPT

Page 1: Apresentaodesignpatterns1 110109115005-phpapp02

Design Patterns

Page 2: Apresentaodesignpatterns1 110109115005-phpapp02

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.

Page 3: Apresentaodesignpatterns1 110109115005-phpapp02

Classe A Adaptador Classe B

Page 4: Apresentaodesignpatterns1 110109115005-phpapp02

public interface Pato {

public void quack();

public void fly();

}

Page 5: Apresentaodesignpatterns1 110109115005-phpapp02

public class PatoBravo implements Pato {

@Overridepublic void quack() {

System.out.println("Quack");}

@Overridepublic void fly() {

System.out.println("Fly");}

}

Page 6: Apresentaodesignpatterns1 110109115005-phpapp02

public interface Peru {

public void gorgolejar();

public void fly();}

Page 7: Apresentaodesignpatterns1 110109115005-phpapp02

public class PeruComum implements Peru {

@Overridepublic void gorgolejar() {System.out.println("Glu - Glu");}

@Overridepublic void fly() {System.out.println("Peru comum voando");}

}

Page 8: Apresentaodesignpatterns1 110109115005-phpapp02

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();

}

}

}

Page 9: Apresentaodesignpatterns1 110109115005-phpapp02

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();}

Page 10: Apresentaodesignpatterns1 110109115005-phpapp02

Testando peru adaptadoGlu - GluPeru adaptado

Testando o pato bravoQuackFly

Testando o peru disfarçado de patoGlu - GluPeru adaptadoPeru adaptadoPeru adaptadoPeru adaptadoPeru adaptado

Page 11: Apresentaodesignpatterns1 110109115005-phpapp02

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.

Page 12: Apresentaodesignpatterns1 110109115005-phpapp02

Adaptadores do mundo real

EnumerationhasMoreElements()nextElement()

IteratorhasNext()next()remove()

Page 13: Apresentaodesignpatterns1 110109115005-phpapp02

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();

}

Page 14: Apresentaodesignpatterns1 110109115005-phpapp02

Obrigado !