Observer Mantendo seus objetos atualizados - ppt carregar
Apresentação em tema: "Observer Mantendo seus objetos atualizados"— Transcrição da apresentação:
1 Observer Mantendo seus objetos atualizados
Daniel Roloff Carlos Machado Enzo Zuccolotto Luiz Felipe Trevisan Rafael Holtz 1
2 Imagine… ESTE É O OBSERVER! 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!
3 Imagine… ESTE É O OBSERVER! Um alarme programado para despertar;
Você adiciona eventos ao despertar o alarme. Quando alarme desperta, a torradeira se liga, o café começa a ser passado e o rádio começa a tocar sua rádio preferida. ESTE É O OBSERVER!
4 Utilizando baixo encapsulamento!
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!
5 Definições Nome: Observer(Publicacao- Assinatura)
Problema: diferentes tipos de objetos assinantes estão interessados nas mudanças de estado ou nos eventos de um objeto publicador e cada um quer reagir de sua propria maneira exclusiva quando o publicador gerar um evento. Além disso, o publicador quer manter acoplamento fraco com os assinantes. O que fazer? Solução: defina uma interface "assinante" ou "ouvinte". Os assinantes implementam essa interface. O publicador pode registrar dinamicamente os assintantes que estejam interessados em um evento e notificá-los quando um evento ocorrer.
6 Definições Padrão Comportamental, isto é, define o comportamento dos objetos. Não permite que a estrutura interna do objeto 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.
7 Participantes Subject:
- conhece seus observadores. Um número qualquer de objetos Observer pode observar um subject. - fornece uma interface para acrescentar e remover objetos para associar e desassociar objetos observer. Observer: - define uma interface de atualização para objetos que deveriam ser notificados sobre mudancas em um subject.
8 Participantes ConcreteSubject:
- armazena estados de interesse para objetos ConcreteObserver. - envia uma notificação para os seus observadores quando seu estado muda. ConcreteObsever: - mantém uma referência para um objeto ConcreteSubject. - armazena estados que deveriam permanecer consistentes com os do Subject. - implementa a interface de atualização de observer, para manter seu estado consistente com o do subject.
9 Diagrama de Classes O método update é chamado quando o estado de Subject é alterado Contêm o estado e o controla
10 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.
11 Exemplo Vamos ao código! Try it!
12 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
13 Bibliografia Padrões de Projeto – Use a Cabeça – Eric Freeman e Elisabeth Freeman Spring Loaded Observer Pattern – Scott Priolo le.tss?l=SpringLoadedObserverPattern Utilizando UML e Padrões - Craig Larman Padrões de Projeto. Erich Gamma.