2009-06-08 11 views
3

Donc, pour mon projet actuel, il y a essentiellement trois principales classes Java:Mediator Pattern fonctionne-t-il dans cette situation?

  1. GUI
  2. messagerie instantanée
  3. Calcul

Essentiellement, il doit y avoir une communication complète, donc nous Nous avons décidé d'utiliser l'approche du médiateur plutôt que d'autoriser l'interface graphique à exécuter l'ensemble du projet.

Fondamentalement, le médiateur va encapsuler la communication. Le problème que nous avons rencontré est de savoir comment permettre aux composants de l'interface graphique de se mettre à jour sans créer une tonne de méthodes que le médiateur peut appeler chaque fois que quelque chose se termine.

Ex. Supposons que l'interface graphique souhaite se connecter à l'utilisateur, qu'elle passe par le médiateur pour créer un thread et se connecter, mais que le médiateur doit ensuite relayer le succès/l'échec à l'interface graphique et mettre à jour un message d'état.

L'autre problème concerne les éléments qui ont besoin de mettre à jour l'interface graphique, mais qui n'ont pas besoin du modérateur. Est-il pratique de permettre simplement à l'interface graphique de créer une instance de cette classe et de l'exécuter ou tout devrait passer par le médiateur?

Notre conception originale a juste eu l'interface graphique gérant tout, mais il a vraiment tué la réutilisabilité. Y a-t-il une meilleure méthode de conception à utiliser dans ce cas?

Répondre

3

Si vous trouvez Observer trop lourd, Mediator est peut-être la meilleure solution. Je pense vraiment que vous ne devriez pas avoir l'interface graphique pour lancer le spectacle. Si vous allez utiliser le modèle Mediator, le médiateur lui-même devrait être en charge. Quelque chose que vous pourriez considérer est une variante du modèle de commande. Si vous utilisiez Ruby, je vous conseillerais de passer des rappels de fonction afin d'éviter que le médiateur contacte l'interface graphique pour chaque petite chose. Mais puisque c'est Java, une certaine forme d'encapsulation d'une action dans le style de commande peut aider.

0

Si vous ne souhaitez pas que le médiateur déclenche le rappel/la notification, vous pouvez injecter le rappel dans la fonction de connexion et l'appeler à l'issue de la procédure de connexion.

Cependant, je ne sais pas comment procéder pour injecter le rappel dans Java. Dans une langue où les fonctions sont des citoyens de première classe, vous pouvez simplement passer la fonction, mais vous êtes en Java, donc je suppose que vous devrez utiliser le modèle de commande comme kmorris suggéré.

0

Vous pouvez également essayer de faire en sorte que l'interface graphique fournisse au médiateur un objet de rappel qui gère les valeurs renvoyées de récupération ou définissant les valeurs dont vous avez besoin (une version du modèle de commande). Il y aurait ensuite un appel par appel de l'interface graphique au médiateur.

Une autre idée consiste à regrouper les méthodes appelées par le médiateur en segments liés sémantiquement. En particulier, si le médiateur a des sections où il a tendance à appeler plusieurs méthodes GUI consécutives:

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

vous pouvez créer une seule méthode qui gère le résultat de l'appel tous les trois. L'avantage des méthodes sémantiques groupées (c'est-à-dire setFileInformation sur setFileMenu, setTab, etc.) est également alors si vous avez besoin de changer l'interface graphique, le contenu des méthodes peut changer, mais l'appel fait le médiateur peut ne pas.

Questions connexes