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 thisobservador, puedo usar el gettersdel sujeto para obtener la información que desea.
¿Para qué sirve el argargumento sobre el método de actualización?
                    
                        java
                                observer-pattern
                                
                    
                    
                        USer22999299
fuente
                
                fuente

arges 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
getmétodos específicos de clase sobre el tema. Esto es malo. B- hace que laObservableinterfaz sea más específica para la clase, ofreciendogetmé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
AgeObserverque se notifican cuando se cambia la 'edad' del sujeto y a lasHeightObserverque se envía la corrienteheightdel 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
Infoobjeto 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
Observableinterfaces más específicas , que ofrecen métodos de acceso más específicos. Por ejemploAgeObservableofrece 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
Observery 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
AgeObservernecesitan simplementeageel tema? Implemente el modelo 'push'. Menos acoplamiento y más simple.¿Todos los
HeightObservers 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 laObservableinterfaz (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 argestá destinado al modelo 'push', dondeargse envía un 'paquete de información' al observador.Observableinterfaz? 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.