segunda-feira, 30 de março de 2009

Implementando Obsever em Java

3

Segundo a wikipedia:
O padrão obsever diz que um objeto (observado) mantem uma lista de outros objetos (observadores), e notifica aos observadores qualquer mudança que ocorro no observado.

O Java já traz uma implementação do observer padrão, e a utilizamos aqui onde trabalho pra implementar o MVC com Swing, e realmente achei uma abordagem muito interesse, e simples de ser feita.

é muito simples de se utilizar, e esse post vai ser pequeno sim :).

primeiramente na nossa classe observada temos que fazela extender a Obervable e isso já a torna apta para ser observada por outra classe, as classes que vão observala devem implementar a interface Observer que contem a assinatura de um único metodo update, a cada notificação do modelo é chamado esse metodo update, ridiculamente simples e facil.

Vamos a um exemplo prático:


public class MeuObservado extends Observable{

public void hello(){
setChanged();
notifyObservers("Hello World!");
}

}


Agora quem vai observar essa classe


public class MeuObservador implements Observer{
public MeuObservador(){
MeuObservado obj = new MeuObservado();
obj.addObserver(this);
obj.hello();
}
public void update(Observer o, Object arg){
System.out.println(arg);
}
}


só executar e pronto, um hello world utilizando observer, se vc tiver mais classes que utilizem esse hello world basta adiciona-la ao observer, e ela será notificada também. simples, pratico e facil. Excelente maneira de proporcionar baixo acoplamento entre as classes.

Outra hora vou postar sobre como criar listener no Swing.

[]'s






3 comentários:

Anônimo disse...

Oi colega posta um exemplo com swing ai do Observer.
Se vc puder e, se vc tem como mostrar, alguma coisa com MVC e swing + acesso a banco. Ta certo que SWING já eh MVC, mas implemtando uma aplicação swing com acesso a banco.
Otimos post

Unknown disse...

Não entendi nem compilou esse seu post. falta código ...

Rafael Felix disse...

Qual foi o erro ou o problema no codigo?

 
Design by ThemeShift | Bloggerized by Lasantha - Free Blogger Templates | Best Web Hosting