Observer Professor: Hyggo Almeida O que vimos na última aula? Decorator Iterator Observer 2 O que veremos hoje? Observer Observer 3 Observer Computação Ubíqua Casa inteligente Cenário não tão futurista Software embutido Observer 4 Observer Minha Casa Observer 5 Observer Como projetar??? Televisão Usuário vouChegar(30) Telefone vaiChegar(30) Geladeira Microondas mic; ArCondicionado arc; Torradeira tor; Computador cp; Geladeira gel; vaiChegar(30) vaiChegar(30) Microondas ArCondicionado Torradeira Computador Observer 6 Observer Problemas!!! Alto acoplamento Na verdade, o acoplamento deve ser mínimo Computador, Microondas, televisão... etc, estão interessados apenas no EVENTO ocorrido no telefone Querem ser notificados quando tal EVENTO ocorrer Observer 7 Observer Solução??? Padrão Observer Definição de dois papéis • Observador (Observer) • Ouvinte (Listener) Observer Avisa a todos os ouvintes interessados quando o Evento ocorre Observer * <<interface>> Listener Cadastra-se no observador como interessado em um Evento 8 Observer No nosso exemplo TelefoneObsevador tocar(); addListener(EletroOuvinte); dispararEvento(); cria anuncia * <<interface>> EletroOuvinte receiveEvent(EventoToque); Computador Microondas ArCondicionado EventoToque getTime(); Observer Torradeira Geladeira 9 Observer Intenção definir uma dependência um-para-muitos entre objetos, de maneira que quando um objeto muda de estado todos os seus dependentes são notificados e atualizados automaticamente. Também conhecido como: Dependents e Publish-Subscribe Observer 10 Observer Aplicabilidade quando a mudança em um objeto exige a mudança em outros, e você não sabe quantos objetos necessitam ser mudados. quando um objeto deveria ser capaz de notificar outros objetos sem fazer hipóteses, ou usar informações, de quem são estes objetos. Observer 11 Observer Conseqüências baixo acoplamento entre os anunciantes e os ouvintes da notificação suporte para comunicações baseadas em difusão (broadcast) atualizações inesperadas Observer 12 Observer Implementem o exemplo de Oberver apresentado Apenas com Computador e Microondas Estes dois terão apenas o método receiveEvent exigido pela interface O método de Computador deve imprimir na tela: • “Recebendo dados do trabalho” O método de Microondas deve imprimir na tela: • “Esquentando o Frango!!!” Observer 13 O que vimos hoje? Observer Observer 14 O que veremos na próxima aula? Strategy Template Method Observer 15 Dúvidas? ? Observer 16