Padrão de Projetos Observer: Implementando mísseis teleguiados – parte 1
Imagine a cena: Você resolve passear com seu filho, prometendo a ele mostrar uma surpresa no final do trajeto. Como qualquer menino inquieto que se preze, ele passa os primeiros 15 minutos do passeio perguntando “Já chegou? Já chegou? Já chegou? Já chegou? Já chegou?”. Esperto como só você seria, resolve cortar as perguntas do garoto com uma única resposta: “Quando chegar, eu te aviso”.
Apesar de simples, isso é tudo que você precisa saber antes de ler sobre o padrão Observer (Observador).
No exemplo anterior temos todas as entidades do padrão Observer bem definidas. Seu filho é o Observador, aquele que está ali ansioso, esperando seu aviso de quando é que a tal surpresa vai chegar. Já você é o que chamamos de Sujeito Observado, quem detém a informação da surpresa, a função de identificar quando ela já pode ser mostrada e avisar a seu observador que chegou a hora dele vê-la.
Como podemos ver, os Observadores se registram no Sujeito Observado, esperando só o momento de reagir às mudanças no Sujeito. Outro exemplo claro da lógica do padrão Observador é assinar os feeds de um site ou uma revista qualquer: todos os assinantes são avisados quando os novos artigos são publicados, bastando esperar para que isso aconteça.
O funcionamento do padrão é simples, mas os ganhos com ele são muito grandes. Com ele você consegue poupar o processador de inúmeras requisições frustradas (como todos os “Já chegou?” antes de realmente ter chegado), deixando para avisar a todos aqueles que se registraram como observadores quando o evento esperado ocorrer. Até que isso ocorra, eles ficam lá, quietinhos, sem encher o saco de ninguém...
O padrão é tão importante que, em muitos casos, seu uso é completamente transparente, sendo já embutido aos frameworks. No Actionscript 3.0, por exemplo, quando utilizamos um eventListerner, não estamos fazendo nada mais que utilizar o padrão. A seguinte linha...
_botao.addEventListener(MouseEvent.CLICK, aoClicar);
... na realidade, está registrando o objeto _botao como observador dos eventos do AS3.0. Quando o evento MouseEvent.CLICK ocorrer, _botao engatilhará o método aoClicar.
“Ta Tiago, mas o que os mísseis teleguiados tem a ver com isso?” Como não poderia ser diferente, na próxima parte do artigo vocês terão um exemplo de como implementar o Observer, brincando com esses mísseis teleguiado. Até lá!
novembro 22nd, 2009 - 12:07
óia! muito bom, mas em vez de usar o exemplo do pirralho chato perguntando, seria melhor usar o exemplo do peido… fica mais claro. ahsdiuashdiuasdh
zoeira!
muito bom, parabéns belo blog Tiago.