En el libro original que acuñó los términos Observador y Mediador, Patrones de diseño, Elementos de software orientado a objetos reutilizables , dice que el patrón de Mediador puede implementarse utilizando el patrón de observador. Sin embargo, también puede implementarse haciendo que los colegas (aproximadamente equivalentes a los patrones de los sujetos del observador) tengan una referencia a una clase de mediador o una interfaz de mediador.
Hay muchos casos en los que desea utilizar el patrón de observador, la clave es que el objeto no debe saber qué otros objetos están observando su estado.
El mediador es un poco más específico, evita que las clases se comuniquen directamente, sino a través de un mediador. Esto ayuda al principio de Responsabilidad Única al permitir que la comunicación se descargue a una clase que solo maneja eso.
Un ejemplo clásico de Mediator está en una GUI, donde el enfoque ingenuo puede conducir a un código en un evento de clic de botón que dice "si el panel Foo está deshabilitado y el panel Bar tiene una etiqueta que dice" Ingrese la fecha "y luego no llame al servidor de lo contrario, adelante ", donde con el patrón de Mediador podría decir" Solo soy un botón y no tengo ningún negocio terrenal que sepa sobre el panel Foo y la etiqueta en el panel de la Barra, así que solo preguntaré a mi mediador si llamo al servidor está bien ahora ".
O, si se implementa utilizando el patrón de observador, el botón diría "Hola, observadores (que incluiría al mediador), mi estado cambió (alguien me hizo clic). Haga algo al respecto si le importa". En mi ejemplo, eso probablemente tiene menos sentido, pero a veces lo sería, y la diferencia entre Observer y Mediator sería más una intención que una diferencia en el código mismo.