Propósito:
Define una dependencia de uno a muchos entre objetos.
Cuando un objeto (sujeto observado) cambia, notifica a otros objetos (sujetos observadores).
También conocido como:
Dependents, Obervador (Observer en español).
Aplicabilidad:
- Cuando un cambio en un objet requiere cambiar otros, y no sabemos cuántos objetos nesecitan cambiarse.
- Otros.
Estructura:
(Nota: esta pensado para .net*)

Codificacion:
(con C#)
Interfaces:
public interface ISujetoObservado
{
void RegistrarObservador(IObservador pIObservador);
void Notificar(object pMensaje);
void QuitarObservador(IObservador pIObservador);
}
public interface IObservador
{
void RegistrarmeComoObservador(IObservador pIObservador);
void RegistrarmeComoObservador(IObservador pIObservador);
void Notificacion(object pMensaje);
}
Clases:
public class ClaseConcreta : ISujetoObservado
{
private List<IObservador> mListaObservadores = new List<IObservador>();
void RegistrarObservador(pIObservador)
{
mListaObservadores.Add(pIObservador);
}
void Notificar(object pMensaje)
{
foreach(IObservador O in mListaObservadores)
{
IObservador.Notificacion(pMensaje)
}
}
void QuitarObservador(IObservador pIObservador)
{
mListaObservadores.Remove(pIObservador)
}
}
public class Observador : IObservador
{
public Observador()
{
RegistrarmeComoObservador()
}
RegistrarmeComoObservandor()
{
ClaseConcreta.AgragarObservador(this);
}
QuitarmeComoObservador()
{
ClaseConcreta.QuitarObservador(this);
}
Notificacion(object pMensaje)
{
Console.WriteLine((string)object);
}
}
*.NET no permite herencia múltiple, por lo tanto para no perder la posibilidad de herencia por aplicar un patrón lo eh implementado con interfaces, pero aparte de la restricción de múltiple herencia, suena lógico implementarlo de esta manera, no todas las clases van a notificar de la misma manera, por lo tanto sobrescribir el método Notificar esta bueno. La contra que uno debe definir el atributo array que guardara la lista de observadores en la clase concreta.