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

From Wiki**3

 
(16 intermediate revisions by the same user not shown)
Line 1: Line 1:
O padrão "state" permite que um objecto altere o seu comportamento quando o seu estado muda.
+
{{NAVPO}}
 +
{{TOCright}}
 +
O padrão "adapter" permite alterar o comportamento e a interface de um objecto, para que possa ser utilizado noutro contexto.
  
 
==Estrutura do Adaptador de Classes ==
 
==Estrutura do Adaptador de Classes ==
 +
 +
O padrão ''adapter'' (versão adaptador de classes) tem a seguinte estrutura de classes:
 +
 +
[[Image:adapter-cls-dpcd.png|500px]]
  
 
==Estrutura do Adaptador de Objectos ==
 
==Estrutura do Adaptador de Objectos ==
  
O padrão ''state'' tem a seguinte estrutura de classes:
+
O padrão ''adapter'' (versão adaptador de objectos) tem a seguinte estrutura de classes:
  
[[Image:state-dpcd.png|500px]]
+
[[Image:adapter-obj-dpcd.png|500px]]
  
 
==Exemplos==
 
==Exemplos==
  
=== Reprexsentação Esquemática ===
+
* [[Adapter Pattern (padrão de desenho)/Patos e Perus]]
 
 
[[Image:state-patoperu.png]]
 
 
 
=== Implementação ===
 
 
 
Patos e perus.
 
 
 
  public interface Pato {
 
    public void quáquá();
 
    public void voar();
 
  }
 
 
 
 
 
  public class PatoMarreco implements Pato {
 
    public void quáquá() {
 
      System.out.println("Quá! Quá!");
 
    }
 
 
 
    public void voar() {
 
      System.out.println("Voando...");
 
    }
 
  }
 
 
 
 
 
  public interface Peru {
 
    public void gluglu();
 
    public void voar();
 
  }
 
 
 
 
 
  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();
 
    }
 
  }
 
 
 
 
 
  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(); }
 
  }
 
  
  public class AdaptadorDePato implements Peru {
+
== Exercícios ==
    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(); }
 
    }
 
  }
 
  
  public class PeruDeTestes {
+
* [[Adapter Pattern (padrão de desenho)/Exercício 01: Cat Stream|Exercício 01: Cat Stream]]
    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();
 
      }
 
    }
 
  }
 
  
[[category:OOP]]
+
[[category:Ensino]]
 +
[[category:PO]]

Latest revision as of 14:03, 19 November 2015

Programação com Objectos
Introduction
Creation and Destruction
Inheritance & Composition
Abstraction & Polymorphism
Code Organization
Java Topics
Inner Classes
Enumerations
Data Structures
Exceptions
Input/Output
RTTI
Other Topics
JUnit Tests
UML Topics
Design Patterns
"Simple" Factory
Composite & Visitor
Command
Strategy & State
Template Method
Observer
Abstract Factory
Decorator & Adapter
Façade (aka Facade)

O padrão "adapter" permite alterar o comportamento e a interface de um objecto, para que possa ser utilizado noutro contexto.

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

Exercícios