Adapter Pattern (padrão de desenho): Difference between revisions
From Wiki**3
No edit summary |
|||
| Line 23: | Line 23: | ||
Patos e perus. | Patos e perus. | ||
<java5> | |||
public interface Pato { | public interface Pato { | ||
public void quáquá(); | public void quáquá(); | ||
public void voar(); | public void voar(); | ||
} | } | ||
</java5> | |||
<java5> | |||
public class PatoMarreco implements Pato { | public class PatoMarreco implements Pato { | ||
public void quáquá() { | public void quáquá() { | ||
| Line 39: | Line 39: | ||
} | } | ||
} | } | ||
</java5> | |||
<java5> | |||
public interface Peru { | public interface Peru { | ||
public void gluglu(); | public void gluglu(); | ||
public void voar(); | public void voar(); | ||
} | } | ||
</java5> | |||
<java5> | |||
public class PeruSelvagem implements Peru { | public class PeruSelvagem implements Peru { | ||
public void gluglu() { | public void gluglu() { | ||
| Line 67: | Line 67: | ||
} | } | ||
} | } | ||
</java5> | |||
<java5> | |||
public class PatoDeTestes { | public class PatoDeTestes { | ||
public static void main(String[] args) { | public static void main(String[] args) { | ||
| Line 89: | Line 89: | ||
static void testarPato(Pato pato) { pato.quáquá(); pato.voar(); } | static void testarPato(Pato pato) { pato.quáquá(); pato.voar(); } | ||
} | } | ||
</java5> | |||
<java5> | |||
public class AdaptadorDePato implements Peru { | public class AdaptadorDePato implements Peru { | ||
Pato _pato; | Pato _pato; | ||
| Line 105: | Line 106: | ||
} | } | ||
} | } | ||
</java5> | |||
<java5> | |||
public class PeruDeTestes { | public class PeruDeTestes { | ||
public static void main(String[] args) { | public static void main(String[] args) { | ||
| Line 118: | Line 120: | ||
} | } | ||
} | } | ||
</java5> | |||
[[category:OOP]] | [[category:OOP]] | ||
[[category:Teaching]] | [[category:Teaching]] | ||
Revision as of 13:34, 5 March 2008
O padrão "state" permite que um objecto altere o seu comportamento quando o seu estado muda.
Estrutura do Adaptador de Classes
O padrão adapter (versão adaptador de classes) tem a seguinte estrutura de classes:
Estrutura do Adaptador de Objectos
O padrão adapter (versão adaptador de objectos) tem a seguinte estrutura de classes:
Exemplos
Representação Esquemática
Implementação
Patos e perus. <java5>
public interface Pato {
public void quáquá();
public void voar();
}
</java5> <java5>
public class PatoMarreco implements Pato {
public void quáquá() {
System.out.println("Quá! Quá!");
}
public void voar() {
System.out.println("Voando...");
}
}
</java5> <java5>
public interface Peru {
public void gluglu();
public void voar();
}
</java5> <java5>
public class PeruSelvagem implements Peru {
public void gluglu() {
System.out.println("Glu, glu, glu!");
}
public void voar() {
System.out.println("Voando... um bocadinho.");
}
}
public class AdaptadorDePeru implements Pato {
Peru _peru;
public AdaptadorDePeru(Peru peru) { _peru = peru; }
public void quáquá() { _peru.gluglu(); }
public void voar() {
for(int i=0; i < 5; i++) _peru.voar();
}
}
</java5> <java5>
public class PatoDeTestes {
public static void main(String[] args) {
PatoMarreco pato = new PatoMarreco();
PeruSelvagem peru = new PeruSelvagem();
Pato adaptadorDePeru = new AdaptadorDePeru(peru);
System.out.println("O peru faz...");
peru.gluglu();
peru.voar();
System.out.println("\nO pato faz...");
testarPato(pato);
System.out.println("\nO adaptador de peru faz...");
testarPato(adaptadorDePeru);
}
static void testarPato(Pato pato) { pato.quáquá(); pato.voar(); }
}
</java5> <java5>
public class AdaptadorDePato implements Peru {
Pato _pato;
Random _rand;
public AdaptadorDePato(Pato pato) {
_pato = pato;
_rand = new Random();
}
public void gluglu() { _pato.quáquá(); }
public void voar() {
if (_rand.nextInt(5) == 0) { _pato.voar(); }
}
}
</java5> <java5>
public class PeruDeTestes {
public static void main(String[] args) {
PatoMarreco pato = new PatoMarreco();
Peru adaptadorDePato = new AdaptadorDePato(pato);
for(int i=0;i<8;i++) {
System.out.println("O adaptador de pato faz...");
adaptadorDePato.gluglu();
adaptadorDePato.voar();
}
}
}
</java5>