quarta-feira, 13 de junho de 2012

Mediator Pattern


Nome e Classificação do Padrão
Mediator – Padrão Comportamental


Intenção e objetivo
Possui como objetivo encapsular a forma como vários outros objetos interagem

Motivação 
Torna o desenvolvimento mais flexível, pois ao encapsular a forma como vários outros objetos interagem o Mediator dá oportunidade de alteração do código sem que isso afete as demais partes do objeto, pois os objetos são referenciados ao Mediator diminuindo o número de conexões entre eles.
Pode ser usado para manter a consistência da interface.


Aplicabilidade
Quando um conjunto de objetos se comunicam entre si de forma complexa embora bem definido;
Quando está difícil refatorar algum código;
Quando temos objetos com muitas dependências


Estrutura



Participantes 

O objeto Mediador gerencia todas as atividades das classes BtnTocar, BtnProcurar e BtnTransferir implementando um método de execução da interface Command


Colaborações

Command - define a interface para a comunicação entre os objetos próximos.
Mediator - implementa a interface e coordena a interação entre os objetos que estão ligados.
BtnTocar, BtnProcurar, BtnTransferir - se comunica com outros objetos através do mediator


Consequência 

Simplifica a relação entre os objetos, transforma o protocolo de "any to any" para "one to any";
Ajuda a entender o funcionamento dos objetos abstraindo a forma na qual eles cooperam entre si;
Centraliza o comportamento;
Promove desacoplamento entre os objetos. 


Implementação
Processo de um MP3 Player:
A classe principal executa o método MediatorDemo() na classe MediatorDemo que prepara o MP3 Player para execução e o deixa pronto para escutar, transferir ou procurar músicas, ao executar uma das funções é acionado um método específico dentro da classe Mediator.

Exemplos de Código 

Link do projeto com o padrão Mediator
http://www.4shared.com/zip/Mcqbx6Op/Mediator1.html

Link do projeto sem o padrão Mediator
http://www.4shared.com/zip/naGFxEGp/Mediator2.html


Usos Conhecidos
ET++
THINK C
Smalltalk


Padrões relacionados
Façade
Observer




quarta-feira, 6 de junho de 2012

Proxy Pattern



Nome e Classificação do Padrão
Proxy – Padrão Estrutural



Intenção e objetivo
Possui o objetivo de substituir outro objeto para controlar seu acesso, é basicamente uma classe que funciona como uma interface para outra classe podendo se conectar à qualquer coisa à um arquivo, conexão de rede e etc...




Motivação 
Há situações em que o cliente não faz, ou não pode fazer referencia a um objeto diretamente, mas quer ainda interagir com o mesmo.
Um objeto proxy pode agir como intermediário entre o cliente e o objeto no qual ele deseja interagir.
“Serve como uma pessoa autorizada a interagir pela outra”.



Aplicabilidade
Proxies são úteis sempre que há uma necessidade de referenciar de forma mais sofisticada um objeto fornecendo mais consistência do que um simples ponteiro ou uma referência simples pode fornecer.
Remote proxy: representante local para um objeto remoto;
Virtual proxy: cria objetos sob demanda, somente criará esse objetos quando precisar;



Estrutura




Participantes 

O objeto MusicaProxy e o objeto real (MusicaReal) implementam a mesma interface, neste caso chamada de Musica O Proxy encapsula o acesso ao objeto real.



Colaborações

Subject
Interface 
Proxy
Implementa a mesma interface do Real Subject O Proxy encapsula o acesso ao RealSubject.
Real Subject
Implementa a mesma interface do Proxy



Consequência 


Um proxy remoto pode ocultar o fato de que um objeto reside em um espaço de endereçamento diferente;
Um proxy virtual pode implementar otimizações,
como criação de um objeto sob demanda;




Implementação
Processo de um MP3 Player via Web.
A classe principal executa o método play() na classe MusicaProxy que verifica  se a música já foi baixada se sim ele executa o método play() na Classe MúsicaReal e toca a música. O construtor do Objeto MusicaReal carrega a música antes de toca-lá.




Exemplos de Código 

Link do projeto com o padrão Proxy




Usos Conhecidos
O Proxy É muito utilizado pela tecnologia J2EE, pelo objeto ‘javax.ejb.EJBObject’, que representa uma referência remota ao EJB.
O Framework Hibernate também utiliza Proxy em uma técnica utilizada para acessar o banco de dados somente quando for necessário.




Padrões relacionados
Adapter
Decorator