Qual a diferença ente Observer e Eventos?

Olá pessoal…

Dei uma lida nestes dois artigos sobre Observer/Observable

http://www.guj.com.br/java.tutorial.artigo.47.1.guj

Pelo que entendi, é tudo muito parecido com os eventos implementados com ActionListener.

Eu gostaria de saber qual a vantagem de um sobre o outro… Uma das desvantagens que vi é que preciso extender Observable, o que elimina a possibilidade de herdar de alguma outra classe…

vlw!

Eu não conheço muito bem a arquitetura Swing mas pelo que eu sei as Actions são baseadas no padrão Observer sim.

Quanto a extender Observable você não é obrigado a fazer isso quando precisa utilizar esse padrão. Basta você criar para sua necessidade. É bem simples.

O Observer é um padrão de projeto, como você já sabe. ActionListener é uma interface que faz parte do modelo de tratamento de eventos do Swing. Esse modelo é uma aplicação do padrão Observer. Quando uma classe implementa ActionListener, ela é obrigada a definir um método actionPerformed, que é equivalente ao update do Observer (a diferença é que ele recebe como parâmetro um objeto que representa o evento que ocorreu).

[quote=Hagar]Olá pessoal…

Dei uma lida nestes dois artigos sobre Observer/Observable
(…)
[/quote]

O Observador é aquele que recebe os eventos lançados pelo Observado.
O evento é aquilo que o observador envia ao observador.

Se um objeto X tem uma caracteristica Y e pertente que outros objetos possa observar essa caracteristica
será criada um a interface do tipo YObserver que tem um ou mais métodos que recebem um objeto YEvent.
(Na prática os observers são chamados de listeners)

No caso do swing comandos como botões e menus tem acções. Pertence-se que outros objetos observem essas acções. Para isso existe a interface ActionListener que recebe um ActionEvent no método actionPerformed.

O nome do métodos designa o “porquê” o evento está sendo entregue. O obsjeto evento contêm parametros do evento. Por exemplo, quem lançou o evento. No caso de eventos de mouse contêm as coordenadas do click, etc…

Obrigado a todos pela atenção, mas acho que não expliquei direito o meu problema. Aqui vai uma breve descrição do “caso”, hehe

Eu tenho uma aplicação que deve ler continuamente bytes que chegam pela porta serial. Para isso, criei uma classe que trata da operação da serial e uma thread que fica constantemente lendo os bytes e enviando para uma terceira classe que chamei de “Protocolo”. Essa classe protocolo é a responsável for montar uma mensagem com os bytes recebidos e quando uma mensagem é válida, gera um evento para os interessados nessa mensagem.
Eu implementei isso usando ActionListener nos “ouvintes” e uma lista ligada de “listeners” na classe Protocolo. Depois de resolvido o problema, encontrei as classes Observer e Observable do Java. Pelo que eu li (links postados acima) é tudo muito semelhante ao que eu havia feito.

Então vem a pergunta: qual a diferença em usar um ou outro? Existe alguma vantagem/desvantagem em alguma das abordagens?

Obrigado novamente!

Vc não deveria ter usado ActionListener. Isso faz parte do Swing, que vc não está usando. Nem as classes Observer/Observable. Esqueça tudo isso.
Vc deveria ter criado uma interface especial sua como ProtocolListener. E fazer a classe protocol se comunicar com quem implementar essa interface. É só isso. Não precisa herdar classes especiais.

Eu geralmente declaro minha própria interface listener e faço a implementação do observable eu mesmo.
Isso pq não gosto da idéia de ter uma “superclasse java” nas minhas classes de negócio. Embora isso facilite um pouco, acho muito intrusivo e, certamente, compromete a flexibilidade do sistema.

Vlw galera! Agora ficou td esclarecido!