Domanda

Quindi, per il mio progetto attuale, ci sono fondamentalmente tre principali classi Java:

  1. GUI
  2. Instant Messaging
  3. calcolo

In sostanza, ci deve essere la comunicazione pieno, così abbiamo deciso di utilizzare l'approccio mediatore piuttosto che permettere che l'interfaccia grafica per eseguire l'intero progetto.

In sostanza, il mediatore sta per incapsulare la comunicazione. Il problema che abbiamo incontrato è come permettere i componenti GUI per aggiornare senza costruire una tonnellata di metodi per il mediatore per chiamare in qualsiasi momento qualcosa completa.

Ex. Di 'la GUI vuole il login l'utente, passa attraverso il mediatore per creare un filo e il login, ma poi il mediatore deve inoltrare il successo / insuccesso di nuovo a interfaccia grafica, così come aggiornare un messaggio di stato.

L'altra questione è cose che hanno bisogno di aggiornare l'interfaccia grafica, ma non hanno bisogno di moderatore. E 'pratico per consentire solo l'interfaccia grafica per creare un'istanza di quella classe ed eseguirlo o dovrebbe andare tutto attraverso il mediatore?

Il nostro design originale appena avuto la GUI gestire tutto, ma in realtà ucciso riusabilità. Esiste un metodo di progettazione meglio usare in questo caso?

È stato utile?

Soluzione

Se si sta trovando Observer di portare troppo in alto, mediatore può essere il modo migliore per andare. Io sicuramente pensare che non si deve avere la GUI eseguire lo spettacolo. Se avete intenzione di utilizzare il modello di mediatore, il mediatore stesso dovrebbe essere in carica. Qualcosa si potrebbe prendere in considerazione è una variante del modello di comando. Se si sta utilizzando Ruby, potrei raccomandare passando callback funzione intorno come un mezzo per evitare di dover mediatore di contattare l'interfaccia grafica per ogni piccola cosa. Ma dal momento che è Java, una qualche forma di incapsulare un'azione in stile modello di comando può aiutare.

Altri suggerimenti

Se non si desidera che la richiamata / comunicazione da triggerd dal mediatore, è possibile iniettare la richiamata nella funzione di login e avere accesso chiamarla quando finisce.

Non so come si dovrebbe fare per iniettare la richiamata in Java, però. In un linguaggio in cui le funzioni sono cittadini di prima classe, si può solo passare la funzione, ma sei in Java quindi credo che si dovrà utilizzare il modello di comando come kmorris suggerito.

Si potrebbe anche provare con la GUI dare il mediatore un oggetto callback che gestisce il recupero dei valori di ritorno o di impostazione qualunque valori necessari (una versione del modello di comando). Ci sarebbe poi essere uno per ogni chiamata dalla GUI al mediatore.

Un altro pensiero è quello di raggruppare i metodi che la mediatrice chiama in pezzi semanticamente correlate. In particolare se il mediatore ha sezioni dove tende a chiamare diversi metodi GUI in una riga:

   gui.a()
   gui.b()
   gui.c()

è possibile creare un unico metodo che gestisce il risultato della chiamata tutti e tre. Il vantaggio di metodi semanticamente raggruppati (cioè setFileInformation sopra setFileMenu, setTab, etc.) è anche se poi avete bisogno di cambiare l'interfaccia grafica, i contenuti dei metodi potrebbero cambiare, ma la chiamata il mediatore fa non può.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top