Observer Mantendo seus objetos atualizados Daniel Roloff Carlos Machado Enzo Zuccolotto Luiz Felipe Trevisan Rafael Holtz
Imagine… Uma editora começa a publicar jornais; Você assina-o e todo dia recebe os mesmos; Você cancela a assinatura quando não quizer mais recebê-los e eles param de chegar; A editora entrega jornais para pessoas, hotéis, companhias aéreas e outras empresas fazem e cancelam assinaturas constantemente. ESTE É O OBSERVER!
Definições Define a dependência um-para-muitos entre objetos para que quando um objeto mude de estado todos os seus dependentes sejam avisados e atualizados automaticamente. Utilizando baixo encapsulamento!
Definições Padrão Comportamental, isto é, define o comportamento dos objetos. Não permite que a estrutura interna do obejto que está se comunicando seja exposta. Swing utiliza muito este padrão, assim como muitos frameworks GUI. Também será encontrado em outros lugares como JavaBeans e RMI.
Diagrama de Classes Contêm o estado e o controla O método update é chamado quando o estado de Subject é alterado
Java Java tem uma implementação própria; É necessário estender a superclasse java.util.Observable (Péssimo!) Possui um método setChanged() utilizado para informar que deve ser enviado o estado para as demais classes. Útil para quando o estado varia muito e queremos acionar os observadores só em determinados casos.
Exemplo Vamos ao código! Try it!
Desvantagens A necessidade de extender uma classe na implementação default do Java Não é possível nem usar composição já que o método setChanged é privado Deve-se otimizar as notificações para que não sobrecarregar os observadores
Bibliografia Padrões de Projeto – Use a Cabeça – Eric Freeman e Elisabeth Freeman Spring Loaded Observer Pattern – Scott Priolo tss?l=SpringLoadedObserverPattern
Dúvidas? Dúvidas?