Difference between revisions of "Adapter Pattern (padrão de desenho)"

From Wiki**3

(Implementação)
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 15: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:

Adapter-cls-dpcd.png

Estrutura do Adaptador de Objectos

O padrão adapter (versão adaptador de objectos) tem a seguinte estrutura de classes:

Adapter-obj-dpcd.png

Exemplos

Representação Esquemática

Patoperu.png

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>