Observer Professor: Hyggo Almeida Observer Computação Ubíqua Casa inteligente Cenário não tão futurista Software embutido Observer 2 Minha Casa Observer 3 Como projetar??? Usuário vouChegar(30) Telefone vaiChegar(30) Geladeira Televisão Microondas mic; ArCondicionado arc; Torradeira tor; Computador cp; Geladeira gel; vaiChegar(30) vaiChegar(30) Microondas ArCondicionado Torradeira Computador Observer 4 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 5 Observer Solução: Padrão Observer Definição de dois papéis Observado (Observable) Observador/Ouvinte (Observer/Listener) Observable Avisa a todos os ouvintes interessados quando o Evento ocorre Observer * <<interface>> Listener Cadastra-se no observador como interessado em um Evento 6 Observer No nosso exemplo TelefoneInteligente tocar(); addListener(EletroOuvinte); dispararEvento(); cria anuncia * <<interface>> EletroOuvinte receiveEvent(EventoToque); Computador Microondas ArCondicionado EventoToque getTime(); Observer Torradeira Geladeira 7 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 8 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 9 Observer Conseqüências baixo acoplamento entre os anunciantes e os ouvintes da notificação suporte para comunicações baseadas em difusão (broadcast) Observer 10 Questões de implementação Listeners podem demorar a retornar da notificação Listeners não devem jogar exceções na notificação Se listeners puderem alterar o Observable na notificação, a coisa complica Dúvidas? ? Observer 12