Loading presentation...

Present Remotely

Send the link below via email or IM

Copy

Present to your audience

Start remote presentation

  • Invited audience members will follow you as you navigate and present
  • People invited to a presentation do not need a Prezi account
  • This link expires 10 minutes after you close the presentation
  • A maximum of 30 users can follow your presentation
  • Learn more about this feature in our knowledge base article

Do you really want to delete this prezi?

Neither you, nor the coeditors you shared it with will be able to recover it again.

DeleteCancel

Make your likes visible on Facebook?

Connect your Facebook account to Prezi and let your likes appear on your timeline.
You can change this under Settings & Account at any time.

No, thanks

Padrão Mediator

No description

Comments (0)

Please log in to add your comment.

Report abuse

Transcript of Padrão Mediator

Padrão Mediator
Analogia
Exemplos práticos
Exemplo em Código
Quando utilizar o Padrão
Vantagens e desvantagens
Aplicação do Padrão em Games
Referências
É um padrão comportamental que objetiva criar um objeto que age como um mediador controlando a interação entre um conjunto de objetos.
Com isto podemos dizer que ele também objetiva diminuir o acoplamento entre os objetos, não deixando eles se referirem entre si de maneira explícita.
Padrão Mediator
Imagine o sistema de vôo atual.
Os aviões interagem com as torres de controle.
As torres de controle sabem exatamente onde cada avião está, qual a sua rota até o destino, momento de decolagem e aterrisagem.
No entanto aviões não se comunicam entre si .
Facilitando o entendimento
Facade:
• Um mediator simplificado torna-se um padrão Facade se o mediador for a única classe ativa e se as classes Colleagues forem classes passivas.

Adapter:
• O padrão Mediator apenas media os pedidos entre as classes Colleague.

• Observer:
Pode implementar a comunicação entre Mediators e Colleagues no padrão Mediator.

Padrões Relacionados:
Padrões de Projeto
Padrão Mediator
Índice :
Como permitir que um grupo de objetos se comuniquem entre si sem que ocorra acoplamento entre eles?

Como remover o forte acoplamento presente em relacionamentos N para N?

Exemplo
Imaginemos a seguinte situação :

Você foi contratado para desenvolver um website de e-commerce simples aonde deveram ser desenvolvidas as 4 páginas para que os usuários possam consultar um catálogo de produtos e realizar suas compras.
O usuário deverá poder navegar entre as páginas livremente.
O código em cada página precisa saber quando ir para uma nova página bem como ativar essa nova página.
Imaginem as variadas possibilidades de conexões e de navegação entre as páginas.
Esse cenário irá gerar multiplas possibilidades, portanto é comum ocorrer duplicação de código em cada página.
Para resolver o problema o padrão Mediator pode ser usado para encapsular todo o código da navegação em um objeto separado.

Dessa forma cada página deverá apenas reportar qualquer alteração de estado para o objeto mediator que saberá qual página deve enviar.

Exemplo
Pense na seguinte situação:

E se fossemos desenvolver 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.

Obviamente seria uma péssima solução criar vários métodos para cada plataforma.
Diagrama Inicial
Imagine que agora o aplicativo irá incluir a plataforma BlackBerry OS, precisaríamos criar os métodos de comunicação com todas as outras plataforma existentes, além de adicionar métodos em todas as outras plataformas para que elas se comuniquem com o BlackBerry OS.
Esta ideia de relacionamento N para N pode deixar o design bem complexo, comprometendo a eficiência do sistema, bem como sua manutenibilidade.

Portanto seria ideal criarmos um mediador para deixar que ele se relacione com as demais classes.
Diagrama com Padrão:
O Mediator recebe mensagens de um Colleague, define qual protocolo utilizar e então envia a mensagem.

O Colleague define como receberá uma mensagem e envia uma mensagem para um Mediator.
Agora a implementação em linhas de codigo:
Mediator:
•Define uma interface que é responsável pela comunicação com os objetos Colleague.

Concrete Mediator(Mediador Concreto):
•Implementa o comportamento cooperativo através da coordenação de objetos Colleague.

•É responsável por manter e conhecer o estado de seus objetos Colleague.

Classes Colleague:
•Cada classe conhece seu objeto Mediator.

•Cada objeto Colleague comunica-se com o seu objeto Mediator, ao invés de se comunicar com outros objetos Colleague.

Colaborações
• Colaboradores enviam e recebem requisições do Mediator.

• Cabe ao Mediator implementar o comportamento cooperativo ao tratar o redirecionamento das requisições para os objetos Colleagues responsáveis.
Quando utilizar:
• É utilizado quando existe grande número de objetos que se comunicam entre si de maneira bem defenida, mas de forma complexa.

• Quando a reusabilidade de um objeto é compremetida pelo fato de se comunicar com muitos outros objetos.

• Quando se deseja evitar a utilização excessiva de herança para distribuir o comportamento entre diversas classes.
• 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.
Vantagens:
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 tornar mais complexos.
Aplicação do mediator em Games:
Na implementação de jogos de luta é muito comum utilizar-se o padrão Mediator para definir as regras da batalha.
Seria uma classe específica que controla os danos de ataque, energia, condições da luta e tempo e nunca os próprios lutadores, como poderia dar a entender.
Diagrama de sequência :
Referencias:
• http://abrindoojogo.com.br/padroes-de-projeto-para-games-mediador

• http://cola-na-net.blogspot.com.br/2010/11/mediator-pattern.html

• http://imasters.com.br/artigo/21642/dotnet/o-padrao-de-projeto-mediator-na-pratica/

• http://abrindoojogo.com.br/padroes-de-projeto-para-games-mediador

• http://imasters.com.br/artigo/21642/dotnet/o-padrao-de-projeto-mediator-na- pratica

• http://s2i.das.ufsc.br/tikiwiki/apresentacoes/padroes_de_projeto.pdf

• http://www.allapplabs.com/java_design_patterns/mediator_pattern.htm

• http://pt.appbrain.com/app/air-control-lite/dk.logisoft.aircontrol

• http://www.macoratti.net/pageview.aspx?catid=16

• http://brizeno.wordpress.com/category/padroes-de-projeto/mediator/
Estrutura :
Full transcript