No livro original que cunhou os termos Observador e Mediador, Padrões de Design, Elementos de Software Orientado a Objetos Reutilizáveis, ele diz que o padrão do Mediador pode ser implementado usando o padrão do observador. No entanto, também pode ser implementado fazendo com que os Colegas (aproximadamente equivalentes ao padrão Assuntos do Observador) tenham uma referência a uma classe de Mediador ou a uma interface de Mediador.
Existem muitos casos em que você deseja usar o padrão observador, o principal é que o objeto não deve saber quais outros objetos estão observando seu estado.
O mediador é um pouco mais específico, evita que as classes se comuniquem diretamente, mas através de um mediador. Isso ajuda o princípio de responsabilidade única, permitindo que a comunicação seja transferida para uma classe que apenas lida com isso.
Um exemplo clássico do Mediador está em uma GUI, em que a abordagem ingênua pode levar ao código em um evento de clique no botão dizendo "se o painel Foo estiver desativado e o painel Bar tiver um rótulo dizendo" Digite a data ", não ligue para o servidor, caso contrário, vá em frente ", onde, com o padrão Mediador, ele poderia dizer" Eu sou apenas um botão e não tenho negócios terrestres sabendo sobre o painel Foo e a etiqueta no painel Bar, então, perguntarei ao meu mediador se ligar para o servidor. está bem agora. "
Ou, se for implementado usando o padrão de observador, o botão dirá "Ei, observadores (que incluiria o mediador), meu estado mudou (alguém clicou em mim). Faça algo sobre isso, se você se importa". No meu exemplo, isso provavelmente faz menos sentido, mas às vezes faria, e a diferença entre Observer e Mediador seria mais uma intenção do que uma diferença no próprio código.