gof mediator pattern

Download Gof   mediator pattern

Post on 12-Apr-2017

88 views

Category:

Software

0 download

Embed Size (px)

TRANSCRIPT

GOF - MediatorAdolfo AugustoYuri Csar

MediatorUm mediador, em linguagem de programao, um dos 23 Padres de Projeto (Design Pattern) indicados para descritos para aumentar re-uso e diminuir acoplamento. Ele desacopla as colaboraes entre um grupo de objetos. Define um objeto que encapsula as interaes dentro desse grupo. Normalmente, um programa feito por um nmero muito grande de classes. Ento, a lgica e o cdigo so distribudos entre essas classes. No entanto, quanto mais classes houver no seu projeto, a comunicao entre essas classes ser mais complexa. Isso faz com que a leitura e a manuteno do programa fique mais difcil, tal situao acarreta na dificuldade de mudanas no projeto, j que, uma simples mudana pode afetar todo o cdigo e as outras classes.

Com o padro mediator, a comunicao entre os objetos encapsulada com um objeto mediador. Isso reduz a dependncia entre os objetos que esto se comunicando.

Mediator

Adolfo Augusto Rodrigues () - https://brizeno.wordpress.com/category/padroes-de-projeto/mediator/Vantagens Desacoplamento entre os diversos participantes da rede de comunicao: participantes no se conhecem;

Eliminao de relacionamentos N para N (so todos substitudos por relacionamentos um para muitos);

A poltica de comunicaes est centralizada no mediador e pode ser alterada sem mexer nos colaboradores;

Desvantagens A centralizao pode ser uma fonte de gargalos de desempenho e de risco para o sistema em caso de falha;

Na prtica os mediadores tendem a se tornarem mais complexos;

Problema Pense na seguinte situao: seria legal ter um aplicativo que trocasse mensagem entre diversas plataformas mveis, 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 eficincia do sistema, bem como sua manutenibilidade.Quando uma situao em que um relacionamento muitos para muitos necessrio em Banco de Dados, uma boa prtica criar uma tabela intermediria e deixar que ela relaciona uma entidade com outras vrias e vice-versa. Esta a ideia do padro Mediator.

Simples, define apenas a interface comum de qualquer Colleague. Todos possuem um Mediator, que deve ser compartilhado entre os objetos Colleague. Tambm define a maneira como todos os objetos Colleague enviam mensagens. O mtodo 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 tambm so bem simples, apenas definem como a mensagem ser recebida.Vejamos ento 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 ento como o Mediator concreto seria implementado:

O Mediator possui uma lista de objetos Colleague que realizaro a comunicao e um mtodo para adicionar um novo Colleague.O mtodo enviar() percorre toda a lista de contatos e envia mensagens. Note que dentro deste mtodos foi feita uma comparao 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 mtodo definirProtocolo() apenas imprime na tela o tipo do Colleague que enviou a mensagem, utilizar para isso a verificao instanceof.

Um pouco de teoria

O padro Mediator tem como principal objetivo diminuir a complexidade de relacionamentos entre objetos, garantindo assim que todos fiquem mais livres para sofrer mudanas, bem como facilitando a introduo de novos tipos de objetos ao relacionamento.Outro ganho a centralizao da lgica de controle de comunicao entre os objetos, imagine que o protocolo de comunicao com o Android precisasse ser alterado, a mudana seria em um local bem especfico da classe Mediator.Uma vantagem no muito explorada nesse exemplo que o Mediator centraliza tambm o controle dos objetos Colleague. Quando o relacionamento entre objetos Observer e Subject fica muito complexo, pode ser necessrio utilizar uma classe intermediria 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 fceis de manter. No entanto isto tambm pode ser um problema, pois a classe Mediator pode crescer em complexidade e se tornar difcil 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