Fatorando codigo comum?

2 respostas
J

Pessoal, estou com o seguinte código:

private synchronized void disparaCartaSemDestinatario() { 
   GeradorDeCartaEvent evento = new GeradorDeCartaEvent(this); 
   Iterator i = geradorListeners.iterator(); 
   while (i.hasNext()) { 
      ((GeradorDeCartaListener)i.next()).cartaSemDestinatario(evento); 
   }       
} 

private synchronized void disparaCartaComumCriada() { 
   GeradorDeCartaEvent evento = new GeradorDeCartaEvent(this); 
   Iterator i = geradorListeners.iterator(); 
   while (i.hasNext()) { 
      ((GeradorDeCartaListener)i.next()).cartaComumGerada(evento); 
   } 
} 

private synchronized void disparaCartaEletronicaCriada() { 
   GeradorDeCartaEvent evento = new GeradorDeCartaEvent(this); 
   Iterator i = geradorListeners.iterator(); 
   while (i.hasNext()) { 
      ((GeradorDeCartaListener)i.next()).cartaEletronicaGerada(evento); 
   } 
}

Estou implementando o padrão observer. No exemplo acima há muita coisa que se repete (só muda a linha de lançamento do evento). Há alguma forma de fatorar esse código a fim de aproveitar o código comum aos 3 métodos?
Agradeço desde já =]

2 Respostas

V

Não há muito o que fazer. O código já está bem simples. Espera só o Tiger sair, aí você muda para:

private synchronized void disparaCartaSemDestinatario() {
   GeradorDeCartaEvent evento = new GeradorDeCartaEvent(this);

   for (GeradorDeCartaListener gerador:geradorListeners) {
      gerador.cartaSemDestinatario(evento);
   }       
}

private synchronized void disparaCartaComumCriada() {
   GeradorDeCartaEvent evento = new GeradorDeCartaEvent(this);

   for (GeradorDeCartaListener gerador:geradorListeners) {
      gerador.cartaComumGerada(evento);
   }     
}

private synchronized void disparaCartaEletronicaCriada() {
   GeradorDeCartaEvent evento = new GeradorDeCartaEvent(this);

   for (GeradorDeCartaListener gerador: geradorListeners) {
      gerador.cartaEletronicaGerada(evento);
   }
}
J

Agradeço a sugestão =]

Criado 30 de junho de 2004
Ultima resposta 30 de jun. de 2004
Respostas 2
Participantes 2