Padrão Observer

2 respostas
X

Viva,

Tenho um problema. Queria aplicar o Padrao Observer aqui num programa. Tenho uma classe controller UI e uma classa CalcularPreços. O que eu queria era sempre que fosse invocado um addPrecos dentro dessa classe, fosse mostrado no ControllerUI uma mensagem. Como poderei estruturar isto ? Tenho que ter um interface Observer, e qual vai ser o meu subject?

Obrigado

2 Respostas

Andre_Brito

Vai aumentar o acoplamento, mas aqui vai minha opinião: cadastre essa UI (e as outras que você precisa e quer) no classe que calcula esses preços (ou na classe que faz a interface com essa função). Quando chamar o addPreco, passa pela lista notificando as UIs que o preço foi modificado (aí atualiza elas).

Algo assim:
// classe que calcula os preços
List<JDialog> uis = new ArrayList<JDialog>();

// ...
public void cadastrarUi(JDialog janela) { uis.add(janela); }

// ...
public void addPreco(double preco) {
    this.preco += preco;
    notificarUis();
}

private void notificarUis() {
    for (JDialog janela: uis) { janela.atualizarPreco(this.preco); }
}
Eu não gosto muito do Observer pra esses casos, mas é uma saída. Outra saída é você obrigar o usuário a sempre clicar num botão de atualizar. Não conheço muito bem Swing, mas acho que outra saída é você colocar essa parte que atualiza no paintComponent das suas janelas (alguém que conhece Swing sabe me dizer se é boa prática isso?). Outra ainda é fazer uma Thread que fica verificando de tempos em tempos se o preço mudou. Mas acho que isso vai comer um bom processamento.
Flavio_Almeida

CDI tem facilitades para o uso do pattern Observer.

Criado 25 de maio de 2011
Ultima resposta 26 de mai. de 2011
Respostas 2
Participantes 3