Question

J'ai fait des recherches sur la différence entre ces deux modèles.

Je crois que la façade encapsule l'accès à un sous-système et un médiateur encapsule les interactions entre les composants.

Je comprends que les composants du système sous ne sont pas conscients de la façade, alors que les composants sont évidemment conscients du médiateur.

J'utilise actuellement une façade pour encapsuler la méthode de récupération des informations de configuration, par exemple App.Config, paramètres utilisateur stockés dans SQL, les informations de l'Assemblée, etc., et un médiateur pour la navigation entre les différentes formes de fenêtres.

Cependant, la plupart des sites font remarquer que le médiateur « ajoute des fonctionnalités ». Que signifient-ils par là? Comment ajouter des fonctionnalités médiateur?

Était-ce utile?

La solution

  

... la plupart des sites font remarquer que le médiateur « ajoute des fonctionnalités » ...

façade seulement expose les fonctionnalités existantes dans une perspective différente.

médiateur « ajoute » fonctionnalité car il combine différentes fonctionnalités existantes pour créer un nouveau.

Prenons l'exemple suivant:

Vous avez un système d'enregistrement. A partir de ce système d'enregistrement, vous pouvez vous connecter à un fichier, à une prise ou à une base de données.

En utilisant le modèle de conception de façade vous le feriez « cacher » toutes les relations de fonctionnalités existantes derrière une « interface » unique celle qui expose la façade.

Code client:

 Logger logger = new Logger();
 logger.initLogger("someLogger");
 logger.debug("message");

La mise en œuvre peut impliquer l'interaction de nombreux objets. Mais à la fin, la fonctionnalité existe déjà. Probablement la méthode « debug » est mis en œuvre comme suit:

Mise en œuvre:

 class Logger { 

      private LoggerImpl internalLogger;
      private LoggerManager manager;

      public void initLogger( String loggerName ) {
          this.internalLogger = manager.getLogger( loggerName ); 
      }

      public void debug( String message ) { 
          this.internalLogger.debug( message );
      }     
 }

La fonctionnalité existe déjà. La façade ne cache. Dans ce cas hypothétique, le LoggerManager gère la création de l'enregistreur correct, et le LoggerImpl est un objet privé de package qui a la méthode « debug ». De cette façon, la façade n'ajoute la fonctionnalité, il est tout simplement en déléguant à des objets existants.

D'autre part le médiateur ajouter la nouvelle fonctionnalité en combinant différents objets.

même code client:

 class Logger { 

      private java.io.PrintStream out;
      private java.net.Socket client;
      private java.sql.Connection dbConnection;
      private String loggerName;


      public void initLogger( String loggerName ) {
               this.loggerName = loggerName;
               if ( loggerName == "someLogger" ) { 
                    out = new PrintStream( new File("app.log"));
               } else if ( loggerName == "serverLog" ) { 
                    client = new Socket("127.0.0.1", 1234 );
               } else if( loggerName == "dblog") { 
                    dbConnection = Class.forName()... .
               }

      }

      public void debug( String message ) { 

               if ( loggerName == "someLogger" ) { 
                    out.println( message );
               } else if ( loggerName == "serverLog" ) { 
                    ObjectOutputStrewam oos = 
                           new ObjectOutputStrewam( client.getOutputStream());
                    oos.writeObject( message );
               } else if( loggerName == "dblog") { 
                    Pstmt pstmt = dbConnection.prepareStatment( LOG_SQL );
                    pstmt.setParameter(1, message );
                    pstmt.executeUpdate();
                    dbConnection.commit();
               }
      }
 }

Mise en œuvre:

<*>

Dans ce code, le médiateur est celui qui contient la logique métier pour créer le « canal » approprié pour se connecter et aussi pour rendre le journal dans ce canal. Le médiateur est de « créer » la fonctionnalité.

Bien sûr, il y a de meilleures façons de mettre en œuvre ce polymorphisme à l'aide, mais le point ici est de montrer comment le médiateur «ajoute » nouvelle fonctionnalité en combinant les fonctionnalités existantes (dans mon échantillon ne montrent pas beaucoup désolé) mais imaginez la médiateur, lu à partir de la base de données de l'hôte distant où se connecter, puis crée un client et enfin écrire à ce flux d'impression client le message du journal. De cette façon, le médiateur serait « médiateur » entre les différents objets.

Enfin, le façade est un motif structural, qui est elle décrit la composition des objets, tandis que le médiateur est un comportement, qui est, elle décrit la manière les objets interagissent.

J'espère que cela aide.

Autres conseils

J'utilise médiateur pour ajouter des fonctionnalités de fichier journal.

Il fonctionne comme ceci:

  • Obj A dit le médiateur dont il a besoin quelque chose.
  • Le médiateur envoie le message à divers objets client.
  • Obj B fait la chose Obj Un besoin, et envoie un message approprié retour par le médiateur.
  • Pendant ce temps, Obj C est également envoyé deux messages par le médiateur, et enregistre les résultats. De cette façon, nous pouvons obtenir des statistiques de l'utilisateur à partir des fichiers journaux.
  • Obj D pourrait être un vérificateur d'erreur aussi bien, de sorte que si Obj B répond que la demande Obj A est impossible, Obj D pourrait être la chose qui indique que l'utilisateur. Les erreurs peuvent maintenant être enregistrés dans un fichier différent que l'activité régulière, et pourrait utiliser d'autres moyens de se comporter (biper, peu importe) que Obj A ne devrait pas vraiment se préoccuper.

sous les modèles connexes, GOF dit: Façade (185) diffère de médiateur en ce sens qu'il fait abstraction d'un sous-système d'objets fournir une interface plus pratique. Son protocole est unidirectionnel; à savoir, les objets de façade font des demandes des classes de sous-système mais pas vice versa. En revanche, médiateur permet un comportement coopératif que les objets ne collègue pas ou ne peuvent fournir, et le protocole est multidirectionnelle.

Prenez une simple analogie:

Façade: comme beaucoup de stationnement, lorsque l'appel

parkingLot.Out(car1);

Mab être une des œuvres simples de la chaîne:

{
  car1.StartEngin();      
  attendant.charge();
  car1.driverOut();
}

Mediator:. Comme feu

Il existe des interactions entre la lumière et la voiture,

et les voitures sont contrôlées par son état.

Je pensais que peut-être cela est le médiateur « ajoute des fonctionnalités »


Et à propos de la définition:

Type de façade: structurel

Type de médiateur: Behavioral

façade plus préoccupé par les composants sont contenu dans l'interface unifié

et le souci de médiateur comment un ensemble d'objets Interagir .

I pensé que la distinction est directionnel: façade est une communication à sens unique entre le client et la façade; médiateur peut être une conversation dans les deux sens, avec des messages reflue-et-vient entre le client et le médiateur.

la clé du modèle de médiateur Extrait du livre « Design Patterns », est décrit comme suit: "Il (un médiateur) agit comme un concentrateur de communication pour widgets (à savoir, 'a' un groupe d'objets interdépendants)."

En d'autres termes, un objet médiateur est le seul SuperObject qui connaît tous les autres objets dans un groupe d'objets collaborateurs et comment ils doivent interagir les uns avec les autres. Tous les autres objets doivent interagir avec l'objet de médiateur, au lieu de l'autre.

En revanche, une façade est une « interface unifiée » pour un ensemble d'interfaces dans un sous-système - pour une utilisation par les consommateurs du sous-système -. Ne figure pas parmi les composants du sous-système

Vous trouverez plus de détails sur modèle de façade dans cette question SE:

Qu'est-ce que Facade Design Pattern

Facade fournit une interface simple et unifiée système complexe.

exemple du monde réel ( vol + hôtel cleartrip réservation ) est disponible dans ce message:

Qu'est-ce que Facade Design Pattern

médiateur du motif de: définir un objet qui encapsule les interactions entre un ensemble d'objets. Médiateur favorise le couplage lâche en gardant des objets de référence à l'autre de façon explicite, et il vous permet de faire varier leur interaction indépendamment.

Un exemple du monde réel de la topologie de réseau maillé a été fourni en dessous question SE:

Médiateur Vs Observer Design Patterns orientée objet

En ce qui concerne votre requête sur médiateur ajoute la responsabilité:

  1. Façade fournit seule interface aux sous-systèmes existants . sous-systèmes existants ne sont pas conscients de la classe de façade elle-même.

  2. Médiateur sait reconnaître les objets collègue . Il permet la communication entre les différents collègues. Dans l'exemple que je cite en question liée, ConcreteMediator ( NetworkMediator ) envoie des notifications de registre et d'un événement annuler l'inscription collègue à tous les autres collègues.

Les deux imposent une sorte de politique sur un autre groupe d'objets. Façade impose la politique d'en haut, et Mediator impose la politique d'en bas. L'utilisation de Façade est visible et contraignant, tandis que l'utilisation de médiateur est invisible et permet.

Façade modèle est utilisé lorsque vous souhaitez fournir une interface simple et spécifique à un groupe d'objets qui dispose d'une interface complexe et générale.

Le modèle Mediator impose également la politique. Cependant, alors que sa politique de façade imposé de manière visible et contraignante, Mediator impose ses politiques de manière cachée et sans contrainte.

Agile Software Development, principes, modèles et pratiques Robert C. Martin.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top