
Subjet:
Esta clase abstracta proporciona una interfaz para conectar y desconectar los observadores. Sin perjuicio de clase también tiene una lista de observadores. Contiene los métodos:
- Attach- Agrega un nuevo observador de la lista de observadores de observación de la materia.
- Detach- Elimina un observador de la lista de observadores de observación de la materia
- Notify - Notifica cada observador llamando a la función de actualización en el observador, cuando se produce un cambio.
La función Attach tiene un argumento como observador. Esto puede ser una función virtual de la clase de observador (actualización en esta descripción), o un puntero de función (en general una función de objeto o functor) en un establecimiento no orientado a objetos.
ConcreteSubject
La clase proporciona el estado de interés para los observadores. También envía una notificación a todos los observadores, llamando a la función de notificar en su superclase o clase base (es decir, en la reserva de la clase). Contiene esta función:
- GetState - Regresa el estado de la materia.
Observadores
Esta clase define una interfaz de actualización para todos los observadores, para recibir notificación de actualización de la materia. Observadores de la clase se utiliza como una clase abstracta para la aplicación concreta de observadores. Contiene esta función:
- Update - Una función abstracta, que será anulada por los observadores concretos.
ConcreteObserver
Esta clase mantiene una referencia con la ConcreteSubject, para recibir el estado de la cuestión cuando se recibe una notificación. Contiene esta función:
- Update - Esta es la función de anular en la clase concreta. Cuando esta función es llamada por el tema, el ConcreteObserver llama a la función de GetState el tema para actualizar la información que tiene sobre el estado del sujeto.
Cada observador concreto se aplica la función de actualización y, en consecuencia, define su propio comportamiento se produce cuando la notificación.
Cuando se produce un cambio de materia, envía una notificación a todos los observadores, llamando a la función Notify . Llama a la función de Update de todos los sujetos de observadores. Notificar a la actualización y funciones pueden tener parámetros que indican el tipo de cambio se ha producido con el tema. Esto permite la optimización en el observador (sólo la actualización de las partes que cambiaron).
Implementacion:
El siguiente ejemplo, simula un chat, donde el servidor u observador en éste caso envía mensajes a sus clientes u observados conectados, puede crear más observados y a la vez activalos y desactivarlos.
package logica;
import java.util.ArrayList;
public class Observador {
private int i;
private String infor="";
protected String mensaje = "";
private ArrayList
public void notificar() {
i = observador.size();
for (int x = 0; x <>
if (observador.get(x).getEstado() == true) {
observador.get(x).notificar(mensaje);
}
}
}
public int getSize() {
return observador.size();
}
public void setMensaje(String str) {
mensaje=str;
}
public String getMensaje(){
infor="";
int y;
for (int x = 0; x <>
y=x+1;
infor=infor+"Observador #: "+y+" - "+observador.get(x).getInformacion()+"\n";
}
return infor;
}
public void agregarObservado() {
observador.add(new Observados());
}
public void desactivarObservado(int ob) {
observador.get(ob).desactivarestado();
}
public void activarObservador(int ob) {
observador.get(ob).activarEstado();
}
}
Referencias:
- DesIgn Patterns: Elements of Reusable Object-Oriented Software Gamma, Helm, Johnson, Vlissides Editorial Addison-Wesley.
- http://en.wikipedia.org/wiki/Observer_pattern
Podrias terminar el codigo??
ResponderEliminarFaltan los for, los if y da un par de fallos.
O si me lo puedes explicar, es que tengo que hacer uno igual....
Gracias!!