2010-06-01 11 views
6

Acabo de empezar a jugar con Observable, Observer y es el método update() y no puedo entender qué debo hacer cuando diferentes acciones llaman notifyObservers().¿Cómo realizar diferentes operaciones dentro de la actualización de Observer() en Java?

Quiero decir, mi clase Observable tiene algunos métodos diferentes que llaman setChanged() y notifyObservers() al final. Dependiendo del método llamado, alguna parte de la UI (Swing) necesita ser actualizada. Sin embargo, solo hay un método update() implementado en la clase Observer.

Pensé en pasar algo al método notifyObservers() y luego puedo verificar el argumento en update(), pero no me parece una buena manera de hacerlo. Incluso si lo hiciera, ¿qué debería pasar? ¿Una cadena con una breve descripción de la acción/método? Un int, como un código de acción/método? ¿Algo más?

¿Cuál es la mejor manera de manejar esta situación?

Respuesta

7

En general, debe actualizar todo lo que se observa cuando recibe una llamada para actualizar(). si eso no es práctico, puede pasarle una pista a notifyObservers().

la banda-de-libro dice que una de las consecuencias del patrón de observador es:.

"cambios inesperados porque los observadores no tienen conocimiento de la presencia del otro, que puede ser ciego para el costo final de cambiar El sujeto. Una operación aparentemente inocua sobre el tema puede causar una cascada de actualizaciones para los observadores y sus objetos dependientes. Además, los criterios de dependencia que no están bien definidos o mantenidos generalmente conducen a actualizaciones falsas, que pueden ser difíciles de rastrear.

Este problema se ve agravado por el hecho de que el protocolo de actualización simple no proporciona detalles sobre lo que cambió en el sujeto. Sin protocolo adicional t o ayudar a los observadores a descubrir qué cambió, es posible que se vean obligados a trabajar duro para deducir los cambios. " también en implementación, dicen:

" Evitar protocolos de actualización específicos del observador: los modelos push y pull. Las implementaciones del patrón Observer a menudo hacen que el sujeto difunda información adicional sobre el cambio. El sujeto pasa esta información como un argumento para actualizar. La cantidad de información puede variar ampliamente.

En un extremo, que llamamos el modelo push, el sujeto envía a los observadores información detallada sobre el cambio, lo quieran o no. En el otro extremo está el modelo de atracción; el sujeto envía nada más que la notificación más mínima, y ​​los observadores piden detalles explícitos a partir de entonces.

El modelo de atracción enfatiza la ignorancia del sujeto sobre los observadores, mientras que el modelo de empuje supone que los sujetos saben algo sobre las necesidades de los observadores. El modelo push podría hacer que los observadores sean menos reutilizables, porque las clases de Subject hacen suposiciones sobre las clases de Observer que pueden no ser siempre ciertas. Por otro lado, el modelo de extracción puede ser ineficiente, porque las clases de Observador deben determinar qué cambió sin la ayuda del Sujeto. "

3

El segundo parámetro para update() es del tipo Object, por lo que puede pasar lo que corresponda. Como nota, el enfoque es bastante general. Por el contrario, una clase que mantiene un EventListenerList puede obtener un grado de seguridad de tipo de tiempo de ejecución cuando se utiliza como se especifica.

Cuestiones relacionadas