Padrão de projeto Observer

7 respostas
J

Ola, bom dia a todos…preciso fazer com que uma informação que chega em uma classe que implementa um Runnable, seja gravada a cada 15 minutos no banco de dados…alguem conhece o padrão Observer?

Obrigada desde já… :slight_smile:

7 Respostas

fabim

Tem um tutorial no GUJ que explica como usar Observer…

Entretanto no seu caso como é pediódico (15min), provavelmente vc usaria só Timer e TimerTask mesmo.

M

Oi,

Não conheço este padrão, mas caso a idéia seja simplesmente executar determinada tarefa com intervalo de tempo regular, você poderia usar o esquema de agendamento de tarefas que a classe TimerTask e Timer dispõem.

Para tanto, você deve criar e instanciar um Timer, e chamar seu método scheduler() passando como parâmetros o intervalo entre as execuções em milisegundos e uma instância da classe criada por você que extende a TimerTask (esta deve ter um método run(), que é o trecho efetivamente executado a cada intervalo).

Espero ter ajudado, :wink:

J

Obrigada pela ajuda…eu vou tentar ver o tutorial no guj sobre o padrao…na vdd, esta padrao foi um ex-professor que disse pra ser usado …sobre o timer, eu xeguei a baixar alguns exemplos pra usar…vamos ver, vou tentar por aqui…

caso nao consiga, falo de novo…brigada

vlw, abraço…

J

mcz…sera que vc poderia por favor postar um codigo de exemplo desta instaciacao da Timer em uma classe que tem o Runnabe?Desculpe, mas estou começando com java ainda, e como vc deve ter percebido, estou bem perdida…

:oops:

M
juliane27vieira:
mcz...sera que vc poderia por favor postar um codigo de exemplo desta instaciacao da Timer em uma classe que tem o Runnabe?Desculpe, mas estou começando com java ainda, e como vc deve ter percebido, estou bem perdida...

:oops:

Então juliane,

É bem simples. Primeiro você deve criar uma classe que extenda a TimerTask(), e que implemente um método run() (onde efetivamente estará a ação a ser executada periodicamente):

import java.util.TimerTask;

public class Tarefa extends TimerTask {
	
	public void run() {
		
		System.out.println("Iniciando tarefa...");
		
		/*
		 * 
		 * TAREFA!
		 * 
		 * */
		 
		 
		System.out.println("Tarefa concluida...");
		
	}
	
}

E para agendar sua execução:

Timer timer = new Timer();
		timer.schedule(new Tarefa(), 60000); /* Executa Tarefa.run() a cada 60.000 milisegundos. */

Espero ter ajudado, qualquer coisa, escreve aí!

:wink:

J
oii mcz...entao, eu consegui colocar a timer e a timertask no run da minha classe thread, porem, começou a dar um erro detectado pela JRE ...postei este erro em outro tópico....agora estou tentando abrir mao do uso da Timer e da TimerTask, e estou tentando usar o sleep da thread , estou tendo problemas tambem, que postei no mesmo topico onde falava deste erro ....era um erro de falta de memoria.... o codigo que produziu o erro era este:
public void run() {
    
     Timer timer = null;
      
     while(true){             
                              
            try {
                
              msg = this.msgAtivo.poll(50,TimeUnit.MILLISECONDS); 
            } catch (InterruptedException ex) {
                ex.printStackTrace();
            } 
            
            if(msg != null){ 
             nego = msg.split("!");
             String aux = nego[0];
             negociacao = aux.split(":");
             System.out.println("negociacao" + negociacao[0]);
               
                                        
                         timer = new Timer();
                         
                        TimerTask controle = new TimerTask() {
                             public void run() {
                                                             
                                 int cont = 0;     
                                if(negociacao.length > 2){
                                 atualizaCotacaoTelnet();
                                                                           
                         }
               
                                        
                                          }
                                        
                                        
                                        };
                                     timer.scheduleAtFixedRate(controle,TEMPO,TEMPO2);    
                              
 
    }
 
 }
  

 }
barbon

Não sei se ajuda, mas segue exemplo de aplicação com Design Pattern Observer:

http://www.patternizando.com.br/2011/03/design-pattern-observer-com-aplicacao-swing-jse/

Criado 27 de fevereiro de 2008
Ultima resposta 21 de mar. de 2011
Respostas 7
Participantes 4