SlideShare una empresa de Scribd logo
1 de 15
GOF - Mediator
Adolfo Augusto
Yuri César
Mediator
Um mediador, em linguagem de programação, é um dos 23 Padrões de Projeto
(Design Pattern) indicados para descritos para aumentar re-uso e diminuir
acoplamento.
Ele desacopla as colaborações entre um grupo de objetos. Define um objeto que
encapsula as interações dentro desse grupo. Normalmente, um programa é feito
por um número muito grande de classes. Então, a lógica e o código são
distribuídos entre essas classes. No entanto, quanto mais classes houver no seu
projeto, a comunicação entre essas classes será mais complexa. Isso faz com que a
leitura e a manutenção do programa fique mais difícil, tal situação acarreta na
dificuldade de mudanças no projeto, já que, uma simples mudança pode afetar
todo o código e as outras classes.
Com o padrão mediator, a comunicação entre os objetos é encapsulada com um
objeto mediador. Isso reduz a dependência entre os objetos que estão se
comunicando.
Mediator
Vantagens
• Desacoplamento entre
os diversos participantes
da rede de comunicação:
participantes não se
conhecem;
• Eliminação de
relacionamentos N para N
(são todos substituídos por
relacionamentos um para
muitos);
• A política de
comunicações está
centralizada no mediador
e pode ser alterada sem
mexer nos colaboradores;
Desvantagens
• A centralização pode ser
uma fonte de gargalos de
desempenho e de risco
para o sistema em caso de
falha;
• Na prática os
mediadores tendem a se
tornarem mais complexos;
Problema
Pense na seguinte situação: seria legal ter um aplicativo que trocasse
mensagem entre diversas plataformas móveis, um Android enviando mensagem
para um iOS, um Symbian trocando mensagens com um Android…
O problema é que cada uma destas plataforma implementa maneiras
diferentes de receber mensagens.
Esta ideia de relacionamento muitos para muitos pode deixar o design bem complexo,
comprometendo a eficiência do sistema, bem como sua manutenibilidade.
Quando uma situação em que um relacionamento muitos para muitos é necessário
em Banco de Dados, uma boa prática é criar uma tabela intermediária e deixar que ela
relaciona uma entidade com outras várias e vice-versa. Esta é a ideia do padrão
Mediator.
Simples, define apenas a interface comum de qualquer Colleague.
Todos possuem um Mediator, que deve ser compartilhado entre os objetos Colleague.
Também define a maneira como todos os objetos Colleague enviam mensagens.
O método “receberMensagem()” fica a cargo das subclasses.
Como exemplo de Colleague, vejamos as classes a seguir, que representam as plataformas Android e iOS:
As classes Colleague concretas também são bem simples, apenas definem como a mensagem
será recebida.
Vejamos então como funciona o Mediator. Vamos primeiro definir a interface comum de
qualquer Mediator:
Ou seja, todo Mediator deverá definir uma maneira de enviar mensagens. Vejamos
então como o Mediator concreto seria implementado:
O Mediator possui uma lista de objetos Colleague que realizarão a comunicação e um
método para adicionar um novo Colleague.
O método “enviar()” percorre toda a lista de contatos e envia mensagens. Note que
dentro deste métodos foi feita uma comparação para evitar a mensagem seja enviada
para a pessoa que enviou. Para enviar a mensagem primeiro deve ser definido qual
protocolo utilizar e em seguida enviar a mensagem.
No nosso exemplo, o método “definirProtocolo()” apenas imprime na tela o tipo do
Colleague que enviou a mensagem, utilizar para isso a verificação instanceof.
Um pouco de teoria
O padrão Mediator tem como principal objetivo diminuir a complexidade de relacionamentos entre
objetos, garantindo assim que todos fiquem mais livres para sofrer mudanças, bem como facilitando a
introdução de novos tipos de objetos ao relacionamento.
Outro ganho é a centralização da lógica de controle de comunicação entre os objetos, imagine que o
protocolo de comunicação com o Android precisasse ser alterado, a mudança seria em um local bem
específico da classe Mediator.
Uma vantagem não muito explorada nesse exemplo é que o Mediator centraliza também o controle dos
objetos Colleague. Quando o relacionamento entre objetos Observer e Subject fica muito complexo,
pode ser necessário utilizar uma classe intermediária que mapeie o relacionamento, facilitando o envio
de mensagens aos objetos Observer.
Ao introduzir o Mediator vimos que a complexidade das classes Colleague foi transferida para o
Mediator, o que tornou as classes Colleague bem mais simples e fáceis de manter. No entanto isto
também pode ser um problema, pois a classe Mediator pode crescer em complexidade e se tornar
difícil de manter.
referencias:
http://www.deinf.ufma.br/~vidal/Topicos2006_2/aula08.pdf
https://brizeno.wordpress.com/category/padroes-de-projeto/mediator/
https://pt.wikipedia.org/wiki/Mediator

Más contenido relacionado

Destacado (13)

үйлдвэрийн нэмэгдэл зардлын бүртгэл
үйлдвэрийн нэмэгдэл зардлын бүртгэлүйлдвэрийн нэмэгдэл зардлын бүртгэл
үйлдвэрийн нэмэгдэл зардлын бүртгэл
 
Fabricación de heno
Fabricación de henoFabricación de heno
Fabricación de heno
 
Tabla de datos categóricos
Tabla de datos categóricosTabla de datos categóricos
Tabla de datos categóricos
 
20% i corte
20% i corte20% i corte
20% i corte
 
Herramientas de microsoft word
Herramientas de microsoft wordHerramientas de microsoft word
Herramientas de microsoft word
 
Makalah sistem reproduksi betina
Makalah sistem reproduksi betinaMakalah sistem reproduksi betina
Makalah sistem reproduksi betina
 
phụ nữ mang thai nhiễm virus viêm gan b
phụ nữ mang thai nhiễm virus viêm gan bphụ nữ mang thai nhiễm virus viêm gan b
phụ nữ mang thai nhiễm virus viêm gan b
 
La danza
La danza La danza
La danza
 
Mcc 1224468370015674-8
Mcc 1224468370015674-8Mcc 1224468370015674-8
Mcc 1224468370015674-8
 
Procedimientos procesal penal ii
Procedimientos procesal penal iiProcedimientos procesal penal ii
Procedimientos procesal penal ii
 
S holloway resume r
S holloway   resume rS holloway   resume r
S holloway resume r
 
Lembang
LembangLembang
Lembang
 
Metaplasmos
MetaplasmosMetaplasmos
Metaplasmos
 

Similar a Gof mediator pattern

Paradigma de orientação a objetos -
Paradigma de orientação a objetos - Paradigma de orientação a objetos -
Paradigma de orientação a objetos - André Victor
 
01 Orientacao A Objetos Programacao
01   Orientacao A Objetos   Programacao01   Orientacao A Objetos   Programacao
01 Orientacao A Objetos Programacaotaniamaciel
 
Apresentação Introdução Design Patterns
Apresentação Introdução Design PatternsApresentação Introdução Design Patterns
Apresentação Introdução Design PatternsLucas Simões Maistro
 
Construção de Frameworks com Annotation e Reflection API em Java
Construção de Frameworks com Annotation e Reflection API em JavaConstrução de Frameworks com Annotation e Reflection API em Java
Construção de Frameworks com Annotation e Reflection API em JavaFernando Camargo
 
Aula de Introdução - JAVA
Aula de Introdução  - JAVAAula de Introdução  - JAVA
Aula de Introdução - JAVAMoises Omena
 
Aula de Introdução - JAVA
Aula de Introdução  - JAVAAula de Introdução  - JAVA
Aula de Introdução - JAVAMoises Omena
 
mediator-140416223151-phpapp02.pdf
mediator-140416223151-phpapp02.pdfmediator-140416223151-phpapp02.pdf
mediator-140416223151-phpapp02.pdfJandersonAzevedo5
 
Padrão de Projeto Mediator
Padrão de Projeto MediatorPadrão de Projeto Mediator
Padrão de Projeto MediatorEder Nogueira
 
Relatório geral pi
Relatório geral piRelatório geral pi
Relatório geral piredesinforma
 
Um Injetor de Falhas para a Avaliação de Aplicações Distribuídas Baseadas no ...
Um Injetor de Falhas para a Avaliação de Aplicações Distribuídas Baseadas no ...Um Injetor de Falhas para a Avaliação de Aplicações Distribuídas Baseadas no ...
Um Injetor de Falhas para a Avaliação de Aplicações Distribuídas Baseadas no ...Dalton Valadares
 
Publish-Subscribe Middlewares
Publish-Subscribe MiddlewaresPublish-Subscribe Middlewares
Publish-Subscribe Middlewareshome
 
Mediator Padrão de Projeto
Mediator Padrão de ProjetoMediator Padrão de Projeto
Mediator Padrão de ProjetoFlávio França
 
Usando serviços Web semânticos e agentes de software num framework para adapt...
Usando serviços Web semânticos e agentes de software num framework para adapt...Usando serviços Web semânticos e agentes de software num framework para adapt...
Usando serviços Web semânticos e agentes de software num framework para adapt...Luiz Henrique Zambom Santana
 

Similar a Gof mediator pattern (20)

Sld 4
Sld 4Sld 4
Sld 4
 
Paradigma de orientação a objetos -
Paradigma de orientação a objetos - Paradigma de orientação a objetos -
Paradigma de orientação a objetos -
 
Artigo sd
Artigo sdArtigo sd
Artigo sd
 
01 Orientacao A Objetos Programacao
01   Orientacao A Objetos   Programacao01   Orientacao A Objetos   Programacao
01 Orientacao A Objetos Programacao
 
Padrões de Projeto de Software
Padrões de Projeto de SoftwarePadrões de Projeto de Software
Padrões de Projeto de Software
 
Apresentação Introdução Design Patterns
Apresentação Introdução Design PatternsApresentação Introdução Design Patterns
Apresentação Introdução Design Patterns
 
Construção de Frameworks com Annotation e Reflection API em Java
Construção de Frameworks com Annotation e Reflection API em JavaConstrução de Frameworks com Annotation e Reflection API em Java
Construção de Frameworks com Annotation e Reflection API em Java
 
Aula de Introdução - JAVA
Aula de Introdução  - JAVAAula de Introdução  - JAVA
Aula de Introdução - JAVA
 
Aula de Introdução - JAVA
Aula de Introdução  - JAVAAula de Introdução  - JAVA
Aula de Introdução - JAVA
 
mediator-140416223151-phpapp02.pdf
mediator-140416223151-phpapp02.pdfmediator-140416223151-phpapp02.pdf
mediator-140416223151-phpapp02.pdf
 
Padrão de Projeto Mediator
Padrão de Projeto MediatorPadrão de Projeto Mediator
Padrão de Projeto Mediator
 
Relatório geral pi
Relatório geral piRelatório geral pi
Relatório geral pi
 
Poo frank
Poo frankPoo frank
Poo frank
 
Um Injetor de Falhas para a Avaliação de Aplicações Distribuídas Baseadas no ...
Um Injetor de Falhas para a Avaliação de Aplicações Distribuídas Baseadas no ...Um Injetor de Falhas para a Avaliação de Aplicações Distribuídas Baseadas no ...
Um Injetor de Falhas para a Avaliação de Aplicações Distribuídas Baseadas no ...
 
Modulo1 1
Modulo1 1Modulo1 1
Modulo1 1
 
Domain-Driven Design
Domain-Driven DesignDomain-Driven Design
Domain-Driven Design
 
poster
posterposter
poster
 
Publish-Subscribe Middlewares
Publish-Subscribe MiddlewaresPublish-Subscribe Middlewares
Publish-Subscribe Middlewares
 
Mediator Padrão de Projeto
Mediator Padrão de ProjetoMediator Padrão de Projeto
Mediator Padrão de Projeto
 
Usando serviços Web semânticos e agentes de software num framework para adapt...
Usando serviços Web semânticos e agentes de software num framework para adapt...Usando serviços Web semânticos e agentes de software num framework para adapt...
Usando serviços Web semânticos e agentes de software num framework para adapt...
 

Gof mediator pattern

  • 1. GOF - Mediator Adolfo Augusto Yuri César
  • 2. Mediator Um mediador, em linguagem de programação, é um dos 23 Padrões de Projeto (Design Pattern) indicados para descritos para aumentar re-uso e diminuir acoplamento. Ele desacopla as colaborações entre um grupo de objetos. Define um objeto que encapsula as interações dentro desse grupo. Normalmente, um programa é feito por um número muito grande de classes. Então, a lógica e o código são distribuídos entre essas classes. No entanto, quanto mais classes houver no seu projeto, a comunicação entre essas classes será mais complexa. Isso faz com que a leitura e a manutenção do programa fique mais difícil, tal situação acarreta na dificuldade de mudanças no projeto, já que, uma simples mudança pode afetar todo o código e as outras classes.
  • 3. Com o padrão mediator, a comunicação entre os objetos é encapsulada com um objeto mediador. Isso reduz a dependência entre os objetos que estão se comunicando. Mediator
  • 4. Vantagens • Desacoplamento entre os diversos participantes da rede de comunicação: participantes não se conhecem; • Eliminação de relacionamentos N para N (são todos substituídos por relacionamentos um para muitos); • A política de comunicações está centralizada no mediador e pode ser alterada sem mexer nos colaboradores;
  • 5. Desvantagens • A centralização pode ser uma fonte de gargalos de desempenho e de risco para o sistema em caso de falha; • Na prática os mediadores tendem a se tornarem mais complexos;
  • 6. Problema Pense na seguinte situação: seria legal ter um aplicativo que trocasse mensagem entre diversas plataformas móveis, um Android enviando mensagem para um iOS, um Symbian trocando mensagens com um Android… O problema é que cada uma destas plataforma implementa maneiras diferentes de receber mensagens.
  • 7. Esta ideia de relacionamento muitos para muitos pode deixar o design bem complexo, comprometendo a eficiência do sistema, bem como sua manutenibilidade. Quando uma situação em que um relacionamento muitos para muitos é necessário em Banco de Dados, uma boa prática é criar uma tabela intermediária e deixar que ela relaciona uma entidade com outras várias e vice-versa. Esta é a ideia do padrão Mediator.
  • 8. Simples, define apenas a interface comum de qualquer Colleague. Todos possuem um Mediator, que deve ser compartilhado entre os objetos Colleague. Também define a maneira como todos os objetos Colleague enviam mensagens. O método “receberMensagem()” fica a cargo das subclasses. Como exemplo de Colleague, vejamos as classes a seguir, que representam as plataformas Android e iOS:
  • 9.
  • 10. As classes Colleague concretas também são bem simples, apenas definem como a mensagem será recebida. Vejamos então como funciona o Mediator. Vamos primeiro definir a interface comum de qualquer Mediator: Ou seja, todo Mediator deverá definir uma maneira de enviar mensagens. Vejamos então como o Mediator concreto seria implementado:
  • 11.
  • 12. O Mediator possui uma lista de objetos Colleague que realizarão a comunicação e um método para adicionar um novo Colleague. O método “enviar()” percorre toda a lista de contatos e envia mensagens. Note que dentro deste métodos foi feita uma comparação para evitar a mensagem seja enviada para a pessoa que enviou. Para enviar a mensagem primeiro deve ser definido qual protocolo utilizar e em seguida enviar a mensagem. No nosso exemplo, o método “definirProtocolo()” apenas imprime na tela o tipo do Colleague que enviou a mensagem, utilizar para isso a verificação instanceof.
  • 13.
  • 14. Um pouco de teoria O padrão Mediator tem como principal objetivo diminuir a complexidade de relacionamentos entre objetos, garantindo assim que todos fiquem mais livres para sofrer mudanças, bem como facilitando a introdução de novos tipos de objetos ao relacionamento. Outro ganho é a centralização da lógica de controle de comunicação entre os objetos, imagine que o protocolo de comunicação com o Android precisasse ser alterado, a mudança seria em um local bem específico da classe Mediator. Uma vantagem não muito explorada nesse exemplo é que o Mediator centraliza também o controle dos objetos Colleague. Quando o relacionamento entre objetos Observer e Subject fica muito complexo, pode ser necessário utilizar uma classe intermediária que mapeie o relacionamento, facilitando o envio de mensagens aos objetos Observer. Ao introduzir o Mediator vimos que a complexidade das classes Colleague foi transferida para o Mediator, o que tornou as classes Colleague bem mais simples e fáceis de manter. No entanto isto também pode ser um problema, pois a classe Mediator pode crescer em complexidade e se tornar difícil de manter.