O trabalho Mediator nesta situação?
-
12-09-2019 - |
Pergunta
Assim, para o meu projeto atual, existem basicamente três principais classes Java:
- GUI
- Instant Messaging
- Computação
Essencialmente, é preciso haver uma comunicação completa, assim nós decidimos usar a abordagem de mediador em vez de do que permitir que a GUI para executar todo o projeto.
Basicamente, o mediador vai encapsular a comunicação. O problema que tenho que correr para é como permitir que os componentes GUI para atualizar sem construir uma tonelada de métodos para o mediador para algo concluída chamar a qualquer momento.
Ex. Dizem que o GUI quer login do usuário, ele passa pelo mediador para criar um segmento e entrar, mas, em seguida, o mediador tem de retransmitir a volta sucesso / fracasso em GUI, bem como atualização de uma mensagem de status.
A outra questão é que as coisas que precisam atualizar o GUI, mas não precisa o moderador. É prático para apenas permitir que a GUI para criar uma instância dessa classe e executá-lo ou deve tudo ir através do mediador?
Nosso projeto original só tinha o GUI gerir tudo, mas ele realmente matou reutilização. Existe um método melhor design para utilização neste caso?
Solução
Se você está encontrando Observer trazer muita sobrecarga, Mediator pode ser o melhor caminho a percorrer. Eu definitivamente acho que você não deve ter o GUI executar o show. Se você estiver indo para usar o padrão de mediador, o próprio mediador deve estar no comando. Algo que você pode considerar é uma variante do padrão de comando. Se você estivesse usando Ruby, eu poderia recomendar passando retornos de chamada de função em torno de como um meio de evitar ter o contato mediador do GUI para cada pequena coisa. Mas já que é Java, alguma forma de encapsular uma ação no estilo padrão de comando pode ajudar.
Outras dicas
Se você não quer que o retorno de chamada / notificação para ser triggerd pelo mediador, você pode injetar o retorno de chamada para a função de login e ter o login chamá-lo quando ele terminar.
Eu não sei como você iria sobre injetar o retorno de chamada em Java, no entanto. Em uma linguagem onde as funções são cidadãos de primeira classe, você poderia simplesmente passar a função, mas você está em Java, então eu acho que você terá que usar o padrão de comando como kmorris sugeridas.
Você também pode tentar ter a GUI dar o mediador um objeto de retorno de chamada que lida com a recuperação de valores de retorno ou a definição de qualquer valor que você precisa (uma versão do padrão Command). Haveria, então, um por chamada da GUI para o mediador.
Outro pensamento é agrupar os métodos as chamadas mediador em pedaços semanticamente relacionados. Em particular, se o mediador tem seções onde ele tende a chamar vários métodos GUI em uma fileira:
gui.a()
gui.b()
gui.c()
Você pode criar um único método que manipula o resultado de chamar todos os três. A vantagem de métodos semanticamente agrupadas (ou seja setFileInformation
sobre setFileMenu
, setTab
, etc.) também é, em seguida, se você precisa mudar a GUI, o conteúdo dos métodos podem mudar, mas a chamada dos mediadores marcas podem não.