padrão Observer e MVC

Boas pessoal,

tenho dois Arrays bidimencionais, e tenho que escrever codigo em Java para o seguinte cenario :

  • Todas as alterações no Array1, implicam modificações no Array2.
  • Todas as alterações no Array2 , implicam modificações no Array1.
  • Existe aqui um par em que os Arrays são Subjects e Observers em simultaneo, certo !?
  • A informação visivel para cada um dos utilizadores do array só pode ser visivel para o proprio, ou seja quem usa o array1 só pode ver a informação do array1, e quem usa o array2 só pode ver a informação do array2.

Isto sugere a ultilização do Padrão Observer + MVC !?

Já li alguma coisa, acho que entendi os conceitos, vendo alguns exemplos aqui no Forum, mas não vi nada em que os Subjects fossem também Observers, sendo que o contrario tb é verdade !

Todas as dicas são bem vindas, desde já o meu obrigado !

Observer faz parte do MVC. É como a view se atualiza sobre o model. No seuc aso você não parece precisar mais que um observer.

Ok,

o que é que acontece se eu tiver mais que um subject a ser observado, tem que ser da mesma classe abstract ou podem ser de classes diferentes ??

[quote=xnet]Boas pessoal,

tenho dois Arrays bidimencionais, e tenho que escrever codigo em Java para o seguinte cenario :

  • Todas as alterações no Array1, implicam modificações no Array2.
  • Todas as alterações no Array2 , implicam modificações no Array1.
  • Existe aqui um par em que os Arrays são Subjects e Observers em simultaneo, certo !?
  • A informação visivel para cada um dos utilizadores do array só pode ser visivel para o proprio, ou seja quem usa o array1 só pode ver a informação do array1, e quem usa o array2 só pode ver a informação do array2.

Isto sugere a ultilização do Padrão Observer + MVC !?
[/quote]

Não sei se o Observer é o melhor.

Para que isso funcione vc tem que encapsular os arrays de forma a poder intersecptar operações que os alteram.
Nesse momento vc envia um evento a todos os Observadores ( tb chamados Listeners) que se registraram como interessados em ouvir esses eventos (daqui o nome listener).
Repare que o objeto que se altera não conhece nada da interface dos objetos que o escutam, apenas conhece
os seus listeners.
Agora, tome atenção que se o que vc quer é estado sincronizado. Logo, qq alteração tem que se propagar para o outro array antes que mais alguma operação seja feita. É como se a propagação estivesse dentro de uma transação.

Acho que a melhor opção seria ter um Shared Object . Ou seja, vc cria apenas 1 array e faz parecer que são 2, 3 … N. Na realidade ,se os estados são sincronizados, é como se o objeto fosse um so.

Note que vc não vai conseguir usar arrays padrão do java em qualquer dos casos, vc tem que encapsular num outro objecto. O melhor seria usar um List e aqui o uso de Vector como implementação é necessário por causa do sincronismo.

Ok,

acho que entendi, a sua observação, mas aquilo que é mostrado a cada um dos users (neste caso 2), é diferente, ou seja, não podem ver o array um do outro, dai a sugestão do MVC !?

[quote=xnet]Ok,

acho que entendi, a sua observação, mas aquilo que é mostrado a cada um dos users (neste caso 2), é diferente, ou seja, não podem ver o array um do outro, dai a sugestão do MVC !?[/quote]

Aplica um filtro. Oque é mostrado e o que é na realidade é objetivo do encapsulamento.
Imagine que vc tem users. Cada um vê uma tela com um Jlist. Cada JList obtém os dados do mesmo Array.
Mas cada JList aplica um filtro de acordo com o usuário que o está vendo. Vc pode incluir esse filtro no ListModel.
E muito mais simples que tentar sincronizar dois arrays.