Padrão Observer

Olhando para o desenho do padrão Observer, percebi uma coisa:

O Subject, que é uma interface, possui uma instância de Observer, outra interface. Isso não é possível, pois todas as variáveis em uma interface são automaticamente [public] static final. Assim, eu não posso em uma classe que implementa Subject herdar essa “variável” (que na verdade é uma constante) e mudar a referência para alguma classe concreta de Observer.

Por exemplo:

public interface Subject{

Observer observer = null; //sou obrigado a atribuir uma referência à constante observer
//métodos vão aqui

}


public class WeatherData implements Subject{

   public void setObserver(Observer o){

      observer = o; //gerará erro, pois estarei tentando modificar uma constante. 

   }

}

Assim, como Subject tem uma referência a Observer? Ao meu ver, cada classe concreta de Subject é que tem uma referência para Observer. Na verdade, uma lista que armazena objetos do tipo Observer. Assim, a associação não deveria ser entre cada classe concreta de Subject e a interface Observer?

Eu já vi como funciona…he he
Tinha esquecido de um detalhe: UML não leva em consideração qualquer linguagem de programação!

No Java esse padrão é muito comum. É só trocar o nome “Observer” por “Listener” e você vai achar observers em todo lugar.

[quote=ECO2004]Eu já vi como funciona…he he
Tinha esquecido de um detalhe: UML não leva em consideração qualquer linguagem de programação![/quote]

:lol: