Domanda

Ho studiato la differenza tra questi due modelli.

Capisco che la facciata incapsula l'accesso a un sottosistema e il mediatore incapsula le interazioni tra i componenti.

Capisco che i componenti del sottosistema non sono consapevoli della facciata, mentre i componenti sono ovviamente consapevoli del mediatore.

Attualmente sto utilizzando una facciata per incapsulare il metodo per recuperare le informazioni di configurazione, ad es.App.Config, impostazione utente memorizzata in SQL, informazioni sull'assembly, ecc. e un mediatore per la navigazione tra diversi moduli di Windows.

Tuttavia, la maggior parte dei siti sottolinea che il mediatore “aggiunge funzionalità”.Che cosa intendono con ciò?In che modo il mediatore aggiunge funzionalità?

È stato utile?

Soluzione

...la maggior parte dei siti sottolinea che il mediatore “aggiunge funzionalità”...

IL facciata espone solo la funzionalità esistente da una prospettiva diversa.

IL mediatore "aggiunge" funzionalità perché combina diverse funzionalità esistenti per crearne una nuova.

Prendiamo il seguente esempio:

Hai un sistema di registrazione.Da quel sistema di registrazione puoi accedere a un file, a un socket o a un database.

Utilizzando il modello di progettazione della facciata si "nascondono" tutte le relazioni dalle funzionalità esistenti dietro un'unica "interfaccia" quella esposta dalla facciata.

Codice cliente:

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

L'implementazione può comportare l'interazione di molti oggetti.Ma alla fine la funzionalità esiste già.Probabilmente il metodo "debug" è implementato come segue:

Implementazione:

 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 funzionalità esiste già.La facciata lo nasconde solo.In questo caso ipotetico, LoggerManager gestisce la creazione del logger corretto e LoggerImpl è un oggetto privato del pacchetto che dispone del metodo "debug".In questo modo la Facciata non aggiunge funzionalità, ma si limita a delegare ad alcuni oggetti esistenti.

D'altra parte il mediatore aggiunge la nuova funzionalità combinando diversi oggetti.

Stesso codice cliente:

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

Implementazione:

 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();
               }
      }
 }

In questo codice, il mediatore è colui che contiene la logica aziendale per creare il "canale" appropriato per accedere e anche per effettuare l'accesso a quel canale.Il mediatore sta "creando" la funzionalità.

Naturalmente, ci sono modi migliori per implementarlo usando il polimorfismo, ma il punto qui è mostrare come il mediatore "aggiunge" nuove funzionalità combinando funzionalità esistenti (nel mio esempio non si è mostrato molto dispiaciuto) ma immagina il mediatore, leggi dal database l'host remoto su cui effettuare il log, quindi crea un client e infine scrive su quel client il flusso di stampa del messaggio di log.In questo modo il mediatore "media" tra i diversi oggetti.

Infine, il facciata è un modello strutturale, ovvero descrive la composizione degli oggetti, mentre il mediatore è un comportamento, cioè descrive il modo in cui gli oggetti interagiscono.

Spero che aiuti.

Altri suggerimenti

sto usando mediatore per aggiungere funzionalità file di log.

Funziona in questo modo:

  • Obj A dice il mediatore ha bisogno di qualcosa fatto.
  • Il mediatore invia il messaggio a vari oggetti client.
  • Obj B fa la cosa Obj A ha bisogno, e invia un messaggio appropriato indietro tramite il mediatore.
  • Nel frattempo, Obj C viene inviato anche entrambi i messaggi dal mediatore, e registra i risultati. In questo modo, siamo in grado di ottenere le statistiche degli utenti dai file di log.
  • Ogg D potrebbe essere un errore di controllo e, in modo che se Obj B risponde che la richiesta di Obj A è impossibile, Obj D potrebbe essere la cosa che segnala che per l'utente. Gli errori possono ora essere registrate in un file diverso da quello regolare attività, e potrebbe utilizzare altri mezzi di comportarsi (segnale acustico, a prescindere) che Obj A non si dovrebbe riguardare proprio con.

sotto i modelli relativi, GOF dice: Facade (185) differisce da mediatore in quanto astrae un sottosistema di oggetti da fornire un'interfaccia più conveniente. Suo protocollo è unidirezionale; cioè, oggetti Facciata effettuare richieste delle classi sottosistema ma non viceversa. Al contrario, mediatore permette comportamento cooperativo che gli oggetti non collega o non possono fornire, e il protocollo è multidirezionale.

Facciamo una semplice analogia:

Facciata:come un parcheggio, quando chiamano

parkingLot.Out(car1);

mab essere una semplice catena funziona:

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

Mediatore:come semaforo.

Ci sono interazioni tra luce e macchina,

e le auto sono controllate dal suo stato.

Ho pensato che forse questo è il mediatore “aggiunge funzionalità”


E riguardo alla definizione:

Tipo di facciata: Strutturale

Tipo di mediatore: comportamentale

facciata più preoccupata per il componenti erano contenuto nel interfaccia unificata,

e la preoccupazione del mediatore Come un insieme di oggetti interagire.

Ho pensato che la distinzione era direzionale: la facciata è una comunicazione a senso unico tra il client e la facciata; il mediatore può essere una conversazione bidirezionale, con messaggi che scorre avanti e indietro tra il client e il mediatore.

Dal libro "Design Patterns", la CHIAVE del modello mediatore è descritto come segue: "It (mediatore) agisce come hub di comunicazione per sezioni (cioè, 'un' gruppo di oggetti interdipendenti)."

In altre parole, un oggetto mediatore è l'unico superobject che conosce tutti gli altri oggetti in un gruppo di oggetti che collaborano e come devono interagire tra loro. Tutti gli altri oggetti devono interagire con l'oggetto mediatore, invece di ogni altro.

Al contrario, una facciata è un "un'interfaccia unificata" per un insieme di interfacce in un sottosistema - per l'utilizzo da parte dei consumatori del sottosistema -. Non tra i componenti del sottosistema

È possibile trovare i dettagli su modello Facade in questa domanda SE:

Ciò che è Facciata Design Pattern?

Facade fornisce un'interfaccia semplice e unificata al sistema complesso.

esempio del mondo reale ( volo + hotel prenotazione cleartrip ) è disponibile in questo post:

Ciò che è Facciata Design Pattern?

mediatore modello: Definire un oggetto che incapsula come un insieme di oggetti interagiscono. Mediatore promuove accoppiamento lasco mantenendo gli oggetti da riferimento gli uni agli altri in modo esplicito, e consente di variare la loro interazione in modo indipendente.

Un esempio reale mondo della topologia di rete Mesh è stata fornita in seguito SE domanda:

mediatore Vs Observer Design Patterns Object-Oriented

Per quanto riguarda la query Mediatore aggiunge responsabilità:

  1. Facciata fornisce solo l'interfaccia a sottosistemi esistenti . Esistenti sotto-sistemi non sono a conoscenza di facciata classe stessa.

  2. mediatore conosce collega oggetti . Esso consente la comunicazione tra i diversi colleghi. Nell'esempio ho citato in questione legata, ConcreteMediator ( NetworkMediator ) invia notifiche di registro e annullare la registrazione caso di un collega a tutti gli altri colleghi.

Entrambi impongono una sorta di politica su un altro gruppo di oggetti. Facciata impone la politica dall’alto, e Mediatore impone la politica dal basso.L'impiego di Facciata è visibile e vincolante, mentre l'uso di Mediatore è invisibile e abilitante.

IL Facciata pattern viene utilizzato quando si desidera fornire un'interfaccia semplice e specifica a un gruppo di oggetti che dispone di un'interfaccia complessa e generale.

IL Mediatore il modello impone anche la politica.Tuttavia, mentre Facade imponeva la sua politica in modo visibile e vincolante, Mediatore impone le sue politiche in modo nascosto e senza vincoli.

Sviluppo software agile, principi, modelli e pratiche Robert C.Martino.

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