Trabalho AV2 PPS
Intenção
O Observer é um padrão de projeto que define uma independência um-para-muitos entre objetos de modo que quando um objeto muda de estado, todos os seus dependentes sejam notificados e atualizados automaticamente.
Ele permite que objetos interessados sejam avisados da mudança de estado ou outros eventos ocorrendo num outro objeto.
Motivação
Um objeto que possua agregações deve permitir que seus elementos sejam acessados sem que a estrutura interna seja exposta. De uma maneira geral pode-se desejar que estes elementos sejam percorridos em varias ordens.
Aplicabilidade
Usa-se o padrão Observer:
- Quando uma abstração apresenta dois aspectos, um depende do outro. Encapsulando estes aspectos em objetos separados permite que você os varie e reutilize de forma independente.
- Quando uma modificação em um objeto requer modificação em outro, e você não sabe (em tempo de programação) quantos objetos precisam ser modificados.
- Quando um objeto deve ser apto a notificar outros objetos sem saber quem são estes objetos. Em outras palavras, quando você os quer fracamente acoplados.
Exemplo Prático
Há uma construção onde existem vários operários. Uma sirene toca informando uma mudança de estado. O alarme da sirene é uma mensagem enviada aos observadores (funcionários), que pode ser um intervalo, término de expediente, etc.
UML
Código-Fonte
//INTERFACE SIRENE
public interface Sirene { public void adicionarObeservador ( Operario o ); public void removerObeservador ( Operario o );
}
//INTERFACE OPERARIO
public void Operario { public void atualizar ( Sirene s );
}
//CLASSE SIRENE CONCRETA
import java.util.ArryList; import java.util.Iterator;
public class SireneConcreta implements Sirene { private Boolean alertaSonoro = false; private ArrayList observadores = new ArrayList(); public void AlteraraAlerta() { if(alertaSonoro) alertaSonoro = false; else alertaSonoro = true;