Me preguntaba sobre la siguiente implementación de
public void update(Observable obs, Object arg)
mientras que quiero enviar a todo mi observador y actualizar usando notifyObserver()
I y pasarle referencias al this
observador, puedo usar el getters
del sujeto para obtener la información que desea.
¿Para qué sirve el arg
argumento sobre el método de actualización?
java
observer-pattern
USer22999299
fuente
fuente
arg
es un parámetro o grupo de parámetros, como una opción adicionalRespuestas:
Al implementar el patrón Observador, hay dos enfoques principales a considerar: el modelo 'push' y el modelo 'pull'.
En el modelo 'push', el sujeto (es decir, el Observable) envía al observador en la notificación todos los datos que necesitará. El observador no necesita consultar el tema para obtener información. En el modelo 'pull', el sujeto simplemente notifica al observador que algo sucedió, y el observador consulta al sujeto en función de obtener la información que necesita.
Analicemos los pros y los contras de ambos enfoques:
empujar
La principal ventaja del modelo 'push' es un menor acoplamiento entre el observador y el sujeto. El observador no necesita saber nada sobre el tema para consultarlo. Si fuera necesario, tendríamos que hacer una de las siguientes acciones: A- hacer downcasting al lado del observador para invocar
get
métodos específicos de clase sobre el tema. Esto es malo. B- hace que laObservable
interfaz sea más específica para la clase, ofreciendoget
métodos específicos , haciendo así que la relación entre el observador y el sujeto sea menos general y haciendo las cosas más copuladas.Al implementar el modelo 'push', evitamos todo esto.
Sin embargo, la desventaja es una menor flexibilidad: es posible que el sujeto no siempre sepa qué información exacta necesitan los observadores para enviársela. Esto a menudo significará interacciones de observador más específicas, como las
AgeObserver
que se notifican cuando se cambia la 'edad' del sujeto y a lasHeightObserver
que se envía la corrienteheight
del sujeto en la notificación.Esta es una opción. El otro es el tema que envía una gran cantidad de información encapsulada en un
Info
objeto de algún tipo y hace que los observadores la consulten desde allí. Pero nuevamente, no podemos estar seguros de que estamos enviando la información correcta. Entonces, es esto o forzar a los observadores a implementar interfaces de observador más específicas, lo que aprieta el acoplamiento en el lado del observador.Halar
Ya noté las desventajas del modelo 'pull'. Los observadores tendrían que saber cosas sobre el tema a fin de consultar la información correcta, lo que lleva a A a desanimar (feo), o B- favorablemente a
Observable
interfaces más específicas , que ofrecen métodos de acceso más específicos. Por ejemploAgeObservable
ofrece ungetAge()
método.La ventaja de esto es una mayor flexibilidad. Cada observador puede decidir por sí mismo qué consultar, sin depender del tema para enviar la información correcta.
Debe elegir la estrategia que sea mejor para el proyecto específico en el que está trabajando.
En realidad, siempre tendrá intefaces
Observer
y específicosObservable
, por lo que de todos modos tendrá un poco de acoplamiento entre los lados.Por lo tanto, elija 'jalar' o 'empujar' según lo que más le convenga.
¿Todos
AgeObserver
necesitan simplementeage
el tema? Implemente el modelo 'push'. Menos acoplamiento y más simple.¿Todos los
HeightObserver
s necesitan información variada sobre el tema, también conocido como uno necesita consultar la edad también, y algún otro objeto necesita consultar el peso además de la altura? Implemente el modelo 'pull'. Esto lo obligaría a agregar accesores (getters) a laObservable
interfaz (ya sea esto o pasar el objeto real como parámetro en su tipo explícito, pero hacerlo a través de la interfaz le permite negar a los observadores el acceso a cosas que no importan). ellos). Esta almación crea un mayor acoplamiento, pero es más flexible.Elija lo que mejor se adapte a su situación.
fuente
Object arg
está destinado al modelo 'push', dondearg
se envía un 'paquete de información' al observador.Observable
interfaz? Si no confía en el tipo concreto del sujeto, es decir, al no hacer el downcasting, el código de observador actual funcionará igual de bien, polimórficamente, con el nuevo sujeto.