Pergunta

Eu estive pesquisando a diferença entre estes dois padrões.

Eu entendo que o acesso fachada encapsula a um sistema de sub e mediador encapsula as interações entre componentes.

Eu entendo que os componentes sub sistema não está ciente da fachada, onde, como componentes são, obviamente, ciente do mediador.

Atualmente estou usando uma fachada para encapsular o método de recuperação de informações de configuração, por exemplo, App.Config, configuração de usuário armazenado no SQL, info Assembléia, etc, e um mediador para a navegação entre formas diferentes janelas.

No entanto, a maioria dos sites apontam que o mediador “acrescenta funcionalidade”. O que eles querem dizer com isso? Como funciona a funcionalidade mediador add?

Foi útil?

Solução

... a maioria dos sites apontam que o mediador “acrescenta funcionalidade” ...

O fachada expõe apenas a funcionalidade existente a partir de uma perspectiva diferente.

O mediador "adiciona" funcionalidade porque combina funcionalidade diferente existente para criar um novo.

Veja o seguinte exemplo:

Você tem um sistema de registro. A partir desse sistema de registro você pode registrar em um arquivo, a uma tomada ou a um banco de dados.

Usando o padrão de design de fachada que seria de "esconder" todas as relações de funcionalidade existente por trás de uma "interface" única a que os expõe fachada.

O código do cliente:

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

A implementação pode envolver a interação de muitos objetos. Mas no final, a funcionalidade já existe. Provavelmente o método "debug" é implementado como segue:

Implementação:

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

A funcionalidade já existe. A fachada apenas oculta-lo. Neste caso hipotético, o LoggerManager lida com a criação do logger correta, ea LoggerImpl é um objeto particular pacote que tem o método "debug". Desta forma, a fachada não está adicionando funcionalidade é apenas delegando a alguns objetos existentes.

Por outro lado, o mediador adicionar a nova funcionalidade através da combinação de diferentes objetos.

O código do cliente Same:

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

Implementação:

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

Neste código, o mediador é aquele que contém a lógica de negócios para criar o apropriado "canal" para fazer logon e também para fazer o registro para esse canal. O mediador é "criar" a funcionalidade.

É claro, há melhores maneiras de implementar este polimorfismo usando, mas o ponto aqui é mostrar como o mediador "acrescenta" nova funcionalidade, combinando a funcionalidade existente (na minha amostra não mostrou muito sorry), mas imaginar o mediador, ler a partir do banco de dados do host remoto onde log, em seguida, cria um cliente e, finalmente, gravar nesse impressão cliente transmitir a mensagem de log. Desta forma, o mediador seria "mediação" entre os diferentes objetos.

Finalmente, o fachada é um padrão estrutural, isto é, descreve a composição dos objetos, enquanto o mediador é uma comportamental, ou seja, ele descreve a maneira os objetos interagem.

Espero que isso ajude.

Outras dicas

Eu estou usando mediador para adicionar a funcionalidade de arquivo de log.

Ele funciona assim:

  • Obj Um diz o mediador precisa de algo feito.
  • O mediador envia a mensagem para vários objetos do cliente.
  • Obj B faz a coisa Obj A precisa, e envia uma mensagem apropriada para trás através do mediador.
  • Enquanto isso, Obj C é também enviou duas mensagens pelo mediador, e registra os resultados. Dessa forma, podemos obter estatísticas do usuário dos arquivos de log.
  • Obj D poderia ser um verificador de erros, bem como, de modo que se Obj B responde que o pedido de Obj A é impossível, Obj D poderia ser a coisa que os relatórios que para o usuário. Erros podem agora ser registrados em um arquivo diferente do que a atividade regular, e poderia usar outros meios para se comportar (a apitar, qualquer que seja) que Obj Um não deve realmente preocupar-se com.

sob padrões relacionados, gof diz: Fachada (185) difere do Mediador na medida em que abstrai um subsistema de objetos para fornecer uma interface mais conveniente. Seu protocolo é unidireccional; isto é, Fachada objetos pedidos make das classes subsistema mas não vice-versa. Em contraste, Mediator permite comportamento cooperativo que os objetos colega não ou não pode fornecer, e o protocolo é multidirecional.

Dê uma analogia simples:

Fachada: como um parque de estacionamento, quando a chamada

parkingLot.Out(car1);

MAB ser uma cadeia simples obras:

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

Mediador:. Como a luz de tráfego

Existem interações entre a luz e carro,

e carros são controlados por ele do estado.

I embora talvez este é o mediador “adiciona funcionalidade”


E sobre a definição:

Tipo de Fachada: Estrutural

O Mediador Tipo: Comportamento

fachada mais preocupados com o componentes foram contido na unificado de interface ,

e preocupação mediador como um conjunto de objetos interagem .

Eu pensei que a distinção foi direcional: Fachada é uma comunicação unidirecional entre o cliente e fachada; mediador pode ser uma conversa de duas vias, com mensagens fluindo e para trás entre o cliente eo mediador.

Do livro "Design Patterns", a chave do padrão Mediator é descrito como se segue: "Ele (o mediador) atua como um hub de comunicação para widgets (ou seja, 'a' grupo de objetos interdependentes)."

Em outras palavras, um objeto mediador é o único superobject que conhece todos os outros objetos em um grupo de objetos de colaboração e como eles devem interagir uns com os outros. Todos os outros objetos devem interagir com o objeto mediador, em vez de outro.

Em contraste, uma fachada é uma "interface unificada" para um conjunto de interfaces em um subsistema - para uso pelos consumidores do subsistema -. Não entre os componentes do subsistema

Você pode encontrar detalhes sobre Fachada padrão em esta questão SE:

O que é Fachada Design Pattern?

Facade fornece uma interface simples e unificada para sistema complexo.

exemplo do mundo real ( cleartrip Voo + hotel reserva ) está disponível neste post:

O que é Fachada Design Pattern?

Mediador padrão : Definir um objeto que encapsula como um conjunto de objetos interagem. Mediator promove o acoplamento fraco, mantendo objetos de se referir uns aos outros de forma explícita, e que lhe permite variar a sua interação de forma independente.

Um exemplo do mundo real da topologia da rede de malha foi fornecida abaixo questão SE:

mediador Vs Observer Object-Oriented Design Patterns

No que diz respeito à sua consulta on Mediador acrescenta responsabilidade:

  1. Fachada fornece apenas interface para sub-sistemas existentes . sub-sistemas existentes não estão cientes de si Fachada classe.

  2. Mediator sabe sobre colega objetos . Ele permite a comunicação entre diferentes colegas. No exemplo que citei em questão ligada, ConcreteMediator ( NetworkMediator ) envia notificações de registro e evento de cancelar o registro de um colega para todos os outros colegas.

Ambos impor algum tipo de política de um outro grupo de objetos. Fachada impõe a política de cima, e Mediator impõe a política de baixo. O uso de Fachada é visível e constrangedora, enquanto o uso de Mediator é invisível e habilitação.

O Fachada padrão é usado quando você quer fornecer uma interface simples e específico para um grupo de objetos que tem uma interface complexa e geral.

O Mediator padrão também impõe políticas. No entanto, enquanto Fachada impôs sua política de uma forma visível e constrangedora, Mediator impõe suas políticas de forma oculta e sem restrições.

Agile Software Development, princípios, padrões e práticas Robert C. Martin.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top