Patrones de observación comprensión

El patrón de diseño Observador permite objetos varios observadores serán notificados cuando un objeto sujeto se cambia de alguna manera. Cada observador registra con el tema, y ​​cuando se produce un cambio, el sujeto notifica a todos ellos. Cada uno de los observadores se notifica en paralelo (es decir, al mismo tiempo).

Creación de una interfaz de sujetos

Cuando se implementa un patrón de diseño, a menudo es una buena idea empezar por crear una interfaz para asegurarse de que los objetos creados se adherirán al patrón que está tratando de usar - especialmente si varios objetos están involucrados. La implementación de la interfaz - programación a una interfaz como se le llama - mantiene su código en línea y por lo general mantiene las cosas más claras.

Cuando usted está poniendo el patrón de observador en código, configurar una interfaz o clase abstracta para el observers- lo general, tendrá múltiples observadores, y hay que seguir los métodos que implementan consistente.

En este ejemplo, también es necesario para configurar una interfaz para el sujeto, que es lo que los observadores reloj- la interfaz Asunto enumera los métodos sujetos deben implementar. Ponga un método registerObserver aquí para que el sujeto pueda realizar un seguimiento de los observadores que quieren estar registrado. Además de registrar los observadores, debe tener alguna forma de deshacerse de ellos, por lo que añadir un método removeObserver. Y hay un método notifyObservers que notificará a los observadores de algún cambio.

Asunto interfaz pública
{
registerObserver public void (Observador O) -
removeObserver public void (Observador O) -
notifyObservers public void () -
}

Esta interfaz se enumeran los métodos que temas como el sistema de base de datos deben implementar. A continuación: la interfaz para los observadores.

Creación de una interfaz de observador

La construcción de la interfaz Observer, implementado por los observadores para que puedan recibir notificaciones, es simple. Todo lo que necesita es un método que se llamará cuando una nueva notificación está listo (que se puede llamar método update). En este ejemplo, se pasa a la operación de base de datos que se llevó a cabo (como “editar”, “eliminar”, “crear” y así sucesivamente) y el registro que se ha cambiado como cadenas al método de actualización.

Observador interfaz pública
{
actualización public void (operación de cadena, ficha String) -
}

Cuando los observadores implementan el método de actualización, el sujeto es capaz de pasarlos al registro que ha sido afectada y la operación que se realizó.

Vale, ya está bueno para ir. Es el momento de crear el objeto de base de datos que se va a realizar un seguimiento de los observadores y les notificará cuando ha habido un cambio.

La creación de un sujeto

El sujeto tiene que dejar que los observadores registran y tiene que notificarles cuando se produce un evento. De acuerdo con la interfaz de Asunto, los tres métodos de un sujeto ha de aplicar en estos ejemplos son: registerObserver, removeObserver, y notifyObservers. Eso es lo que hace la clase de base de datos en este ejemplo.

Para realizar un seguimiento de los observadores, usar un vector de Java llamado observadores, creado en el constructor de base de datos. (El especificador de tipo aquí, , es para Java 1.5 o posterior e indica que cada objeto observador implementa el Observador interface- si está utilizando una versión anterior de Java, omitir el especificador de tipo.)

importar java.util. * -
Base de Datos de clase pública implementa Asunto
{
Vector privada observadores;

Base de datos pública ()
{
observadores = new Vector() -
}
.
.
.
}

Cuando se utiliza un vector, hacer el seguimiento de los observadores es simple. Cuando un observador quiere registrar, se llama al método registerObserver del sujeto, haciéndose pasar como un objeto. El sujeto - objeto de nuestra clase de base de datos - sólo tiene que añadir que el vector de observador a los observadores en el método registerObserver, utilizando el método de complemento de la clase Vector.

importar java.util. * -
Base de Datos de clase pública implementa Asunto
{
Vector privada observadores;

Base de datos pública ()
{
observadores = new Vector() -
}

registerObserver pública vacío (O Observador)
{
observers.add (O) -
}
.
.
.
}

¿Qué hay de la eliminación de un observador del vector de los observadores? No hay problema. Cuando se quiere eliminar un objeto de un vector, puede utilizar quitar del vector de método- aquí es cómo funciona en el método removeObserver de la clase de base de datos:

importar java.util. * -
Base de Datos de clase pública implementa Asunto
{
Vector privada observadores;

Base de datos pública ()
{
observadores = new Vector() -
}

registerObserver pública vacío (O Observador)
{
observers.add (O) -
}

removeObserver pública vacío (O Observador)
{
observers.remove (O) -
}
.
.
.
}

Cuando el usuario realmente hace algo con la base de datos - elimina un registro, por ejemplo - que él llama método editRecord de la clase de base de datos. Por ejemplo, para eliminar el registro 1, es posible llamar a este método como este:

database.editRecord ( “borrar”, “ficha 1”);

Video: SESIÓN DE APRENDIZAJE: MOTIVACIÓN, SABERES PREVIOS Y CONFLICTO COGNITIVO

Esto es lo que el método editRecord se ve así: Cuando se llama a este método, se le pasa la operación de base de datos que desea realizar y el registro que desea trabajar, tanto como cadenas en este ejemplo. Esas cadenas se almacenan para que puedan ser transmitidos a los observadores. Después se almacenan las cuerdas, el método notifyObservers, que viene a continuación, se llama a notificar a todos los observadores.

importar java.util. * -
Base de Datos de clase pública implementa Asunto
{
Vector privada observers-
operación-private String
Cadena registro privado;

Base de datos pública ()
{
observadores = new Vector() -
}
.
.
.
(Operación de cadena, ficha String) public void editRecord
{
this.operation = operación-
this.record = RECORD-
notifyObservers () -
}
}

Aquí está la carne del código, la parte que notifica a cada observador que ha habido un cambio: el método notifyObservers. Cada observador implementa este ejemplo de interfaz de observador - que significa que tiene un método de actualización - por lo que acaba de notifyObservers para recorrer todos los observadores registrados en el vector de observadores, llamando al método de actualización de cada uno con la operación de base de datos y registro afectado.

Video: Observación sobre la metodología de enseñanza para la comprensión

importar java.util. * -
Base de Datos de clase pública implementa Asunto
{
Vector privada observers-
operación-private String
RECORD- cadena privada
.
.
.
notifyObservers public void ()
{
for (int loopIndex = 0- loopIndex lt; observers.size () - loopIndex ++) {
observador Observador = (observador) observers.get (loopIndex) -
observer.update (operación, registro) -
}
}

(Operación de cadena, ficha String) public void editRecord
{
this.operation = operación-
this.record = RECORD-
notifyObservers () -
}
}

Video: �� Como hacer una Torre de observación (Mozhi Watch Tower) | TUTORIAL | Modificacion rubik 3x3

Eso es todo lo que necesita para Database.java, el tema en este ejemplo. El tema le permitirá observadores registran a sí mismos, anular el registro de sí mismos, y recibir una notificación cuando un registro de base de datos ha sido editado (que lo hace con el método editRecord de la clase de base de datos). Todo lo que queda por hacer para conseguir este espectáculo en el camino es la creación de los propios observadores.

Artículos Relacionados