Exemplo de observer
}
public int getEdicao() { return this.edicao;
}
public static void main(String[] args) {
//poderia receber a nova edicao atraves de um recurso externo int novaEdicao = 3;
RevistaInformatica revistaInformatica = new RevistaInformatica();
Assinante1 assinante1 = new Assinante1(revistaInformatica); revistaInformatica.setNovaEdicao(novaEdicao); }
}
class Assinante1 implements Observer {
Observable revistaInformatica; int edicaoNovaRevista; public Assinante1(Observable revistaInformatica) { this.revistaInformatica = revistaInformatica; revistaInformatica.addObserver(this); }
@Override
public void update(Observable revistaInfSubject, Object arg1) { if (revistaInfSubject instanceof RevistaInformatica) {
RevistaInformatica revistaInformatica = (RevistaInformatica) revistaInfSubject; edicaoNovaRevista = revistaInformatica.getEdicao();
System.out.println("Atenção, já chegou a mais uma edição da Revista Informatica. " +
"Esta é a sua edição número: " + edicaoNovaRevista);
}
}
}
Acima temos a implementação do Padrão de Projeto Observer utilizando a API do Java. Nota -se que a
RevistaInformatica é o Subject que está aguardando registros de cliente. Assinante1 é um assinante que se registra na RevistaInformatica para receber notificações sempre que uma nova edição for publicada. Vale ressaltar novamente que setChanged() sempre deve ser chamado antes de notifyObservers() ou o estado interno do objeto não será modificado e ao chamar diretamente notifyObserver() nada acontecerá, pois o estado não foi alterado (este estado é guardado na API). Isso ocorre porque dentro de notifyObservers() temos tipo uma condicional “if (setChanged())” para saber se o estado foi alterado.
Um detalhe a ser observado é que