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?