Pregunta

He estado investigando la diferencia entre estos dos modelos.

Yo entiendo que la fachada encapsula el acceso a un sistema de sub y mediador encapsula las interacciones entre los componentes.

Yo entiendo que los subcomponentes del sistema no son conscientes de la fachada, en tanto que los componentes son obviamente conscientes del mediador.

Actualmente estoy usando una fachada para encapsular el método de recuperación de información de configuración, por ejemplo, App.config, configuración de usuario almacenado en SQL, Asamblea información, etc, y un mediador para la navegación entre las formas diferentes ventanas.

Sin embargo, la mayoría de los sitios señalan que el mediador “añade la funcionalidad”. ¿Qué quieren decir con esto? ¿Cómo añadir funcionalidad mediador?

¿Fue útil?

Solución

  

... la mayoría de los sitios señalan que el mediador “añade la funcionalidad” ...

La Fachada sólo expone la funcionalidad existente desde una perspectiva diferente.

La mediador "añade" funcionalidad, ya que combina diferentes funcionalidades existentes para crear una nueva.

Tome el ejemplo siguiente:

Usted tiene un sistema de registro. A partir de ese sistema de registro usted puede conectarse a un archivo, a una toma de corriente, o para una base de datos.

Utilizando el patrón de diseño de la fachada que lo haría "ocultar" todas las relaciones de la funcionalidad existente detrás de un solo "interfaz" el que expone la fachada.

El código de cliente:

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

La aplicación puede implicar la interacción de muchos objetos. Pero al final, la funcionalidad ya existe. Probablemente el método de "depuración" se lleva a cabo de la siguiente manera:

Implementación:

 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 funcionalidad ya existe. La fachada sólo se esconde. En este caso hipotético, la LoggerManager se encarga de la creación del registrador correcta, y la LoggerImpl es un objeto privado paquete que tiene el método de "depuración". De esta manera la fachada no es la adición de la funcionalidad que sólo está delegando a algunos objetos existentes.

En el otro lado del mediador añadir la nueva funcionalidad mediante la combinación de diferentes objetos.

El código de cliente mismo:

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

Implementación:

<*>

En este código, el mediador es el que contiene la lógica de negocio para crear el "canal" para iniciar una sesión y también para hacer el registro en ese canal. El mediador es "crear" la funcionalidad.

Por supuesto, hay mejores formas de implementar esto usando polimorfismo, pero el punto aquí es mostrar cómo el mediador "agrega" nueva funcionalidad mediante la combinación de la funcionalidad existente (en mi muestra no mostró mucho lo siento), pero imaginar la mediador, leer desde la base de datos del host remoto para iniciar la sesión en que, a continuación, crea un cliente y, finalmente, escribir a la impresora del cliente transmitir los mensajes de registro. De esta manera el mediador sería "mediar" entre los diferentes objetos.

Finalmente, la fachada es un patrón estructural, es decir que describe la composición de los objetos, mientras que el mediador es un comportamiento, es decir, que describe la forma los objetos interactúan.

Espero que esto ayude.

Otros consejos

Estoy usando mediador para agregar funcionalidad archivo de registro.

Funciona de esta manera:

  • Obj A le dice al mediador que necesita que se haga algo.
  • El mediador envía el mensaje a varios objetos de cliente.
  • Obj B hace lo Obj A necesita, y envía un mensaje apropiado de vuelta a través del mediador.
  • Mientras tanto, Obj C se envió también ambos mensajes por el mediador, y registra los resultados. De esta manera, podemos obtener las estadísticas de usuarios a partir de los archivos de registro.
  • Obj D podría ser un corrector de error, así, de modo que si Obj B responde que la petición del Obj A es imposible, Obj D podría ser lo que indica que al usuario. Errores ahora se pueden registrar en un archivo diferente que la actividad regular, y se podía utilizar algún otro medio para comportarse (pitido, lo que sea) que Obj Una realidad no debería ocuparse.

en patrones relacionados, GOF dice: Fachada (185) difiere de mediador en la que se abstrae un subsistema de objetos a proporcionar una interfaz más conveniente. Su protocolo es unidireccional; es decir, objetos de fachada hacen peticiones de las clases de subsistemas, pero no viceversa. Por el contrario, el comportamiento cooperativo Mediador permite que los objetos colega no quieren o no pueden proporcionar, y el protocolo es multidireccional.

Tome una simple analogía:

Fachada: como un estacionamiento, cuando la llamada

parkingLot.Out(car1);

MAB ser un simple funcionamiento de la cadena:

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

Mediador:. Como semáforo

Existen interacciones entre la luz y el coche,

y los coches están controlados por su estado.

I, aunque tal vez este es el mediador “añade la funcionalidad”


Y sobre la definición:

Tipo de Fachada: estructural

Tipo de Mediador: Comportamiento

fachada más preocupados por los componentes fueron contenido en el interfaz unificada ,

y mediador preocupación ¿Cómo un conjunto de objetos interactúan .

pensé que la distinción era direccional: fachada es una comunicación unidireccional entre el cliente y la fachada; mediador puede ser una conversación de dos vías, con mensajes que fluye de ida y vuelta entre el cliente y el mediador.

Del libro "Design Patterns", la tecla del patrón Mediador se describe de la siguiente manera: "It (un mediador) actúa como un centro de comunicación para los widgets (es decir, 'a' grupo de objetos interdependientes)."

En otras palabras, un objeto mediador es el único que sabe SuperObject todos los demás objetos en un grupo de objetos que colaboran y cómo deben interactuar entre sí. Todos los demás objetos deben interactuar con el objeto mediador, en lugar de uno al otro.

En contraste, una fachada es una "interfaz unificada" para un conjunto de interfaces en un subsistema - para su uso por los consumidores del subsistema -. No entre los componentes del subsistema

Puede encontrar detalles sobre la fachada patrón en esta pregunta SE:

¿Qué es la fachada de patrones de diseño?

Facade proporciona una interfaz simple y unificado para sistema complejo.

ejemplo del mundo real ( cleartrip vuelo + hotel reservar ) está disponible en este post:

¿Qué es la fachada de patrones de diseño?

patrón Mediador : Definir un objeto que encapsula cómo interactúan un conjunto de objetos. Mediador promueve la articulación flexible manteniendo los objetos de referirse explícitamente a la otra, y que le permite variar su interacción de forma independiente.

Un ejemplo del mundo real de la topología de red de malla se ha proporcionado a continuación en cuestión SE:

mediador Vs Observer patrones de diseño orientado a objetos

En cuanto a su consulta en Mediador añade responsabilidad:

  1. Fachada proporciona sólo interfaz a los sub-sistemas existentes . subsistemas existentes no son conscientes de la propia clase de fachada.

  2. Mediador conoce colega objetos . Permite la comunicación entre los diferentes colegas. En el ejemplo que he citado en cuestión vinculada, ConcreteMediator ( NetworkMediator ) envía notificaciones de registrar y eliminar caso de un colega a todos los demás colegas.

Tanto imponer algún tipo de política en otro grupo de objetos. Fachada impone la política desde arriba, y Mediador impone la política desde abajo. El uso de Fachada es visible y de constricción, mientras que el uso de Mediador es invisible y de habilitación.

La Fachada patrón se utiliza cuando se desea proporcionar una interfaz simple y específico a un grupo de objetos que tiene una interfaz compleja y general.

La Mediador patrón también impone política. Sin embargo, mientras que la fachada impone su política de una manera visible y constreñir, Mediador impone sus políticas de manera oculta y sin restricciones.

Agile de desarrollo de software, Principios, patrones y prácticas de Robert C. Martin.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top