Eventos

1 resposta
R

Gostaria de saber como faço para criar meus próprios eventos.

Quando o método “somar” da Classe1 ser executado vai disparar um evento. Após o disparo do evento o método “mostrar resultado” da classe2 vai executar.

Exemplo:

public class Classe1

{

public static int resultado = 0;

public void somar(int a, int b)

{

resultado = a + b;

// disparar evento qualquer.

}

}
public class Classe2

{

// metodo que irá ouvir o evento disparado pelo método somar()

public void mostrarResultado()

{

System.out.println(Classe1.resultado);

}

}

Alguém poderia me ajudar a criar eventos próprios.

1 Resposta

J

Você pode usar o design pattern "Observer", é baseado nesse padrão que são implementados os Listeners do AWT/Swing:

Veja um exemplo:

public interface Observador{
   public void notificar(Observavel obs);
}

public interface Observavel{
   public void addObservador(Observador obs);
}


public class Classe1 implements Observavel{
   private List<Observador> observadores = new ArrayList<Observador>();

   public int resultado = 0;

   public void somar(int a, int b){
      resultado = a + b;
      notificarObservadores();
   }

   public void addObservador(Observador obs){
      observadores.add(obs);
   }
   public void notificarObservadores(){
      for(Observador obs : observadores){
         obs.notificar(this);
      }
   }
}

public class Classe2{
   private Classe1 c1 = new Classe1();

   public Classe2(){
      Observador obs = new Observador(){
         public void notificar(Observavel o){
            mostrarResultado();
         }
      };
      c1.addObservador(obs);
   }
      
   public void mostrarResultado(){
      System.out.println(c1.resultado);
   }
}

Pra facilitar já existem as classe Observador e Observavel implementadas na API do Java SE:

http://java.sun.com/j2se/1.5.0/docs/api/java/util/Observable.html
http://java.sun.com/j2se/1.5.0/docs/api/java/util/Observer.html

Sobre o padrão:

http://en.wikipedia.org/wiki/Observer_pattern

Criado 30 de novembro de 2006
Ultima resposta 1 de dez. de 2006
Respostas 1
Participantes 2