Según tengo entendido, el patrón del observador permite que múltiples observadores monitoreen un solo sujeto. ¿Hay un patrón para el escenario opuesto? ¿Existe un patrón para un único observador que monitorea varios temas y responde cuando cualquiera de ellos plantea, digamos, un evento de notificación?¿Qué es lo opuesto al patrón del observador?
Respuesta
El patrón Observer aún se puede usar: simplemente haga que el mismo objeto se registre como un observador en muchos objetos supervisados. Probablemente desee que el evento "Notificar" reciba algún tipo de identificador de objeto observado (el puntero "este", un número de identificación único, etc.) para que el objeto observador pueda elegir una acción apropiada para el objeto que informa el evento.
Mis pensamientos exactamente. Esto todavía me suena como un patrón de observación. –
A menos que solo quiera que el controlador de eventos se ejecute una vez, no importa cuántos editores disparen el evento. –
Para agregar a esto: http://sourcemaking.com/design_patterns/observer (el uso de un solo observador se deja "a la discreción del diseñador") y http://www.eecho.info/Echo/design-pattern/observer-java-pattern/(las variantes son "observador único versus observadores múltiples") – anon
Sí. Es solo otra aplicación del patrón de observador.
The Observer se agrega a muchos Sujetos. Si desea que se realice la misma acción sin importar qué sujeto esté observando, esto es exactamente lo mismo que el patrón Observer que está utilizando.
Si desea una acción por separado según qué Asunto activó el evento, puede usar el parámetro Acción que se pasa al método ActionPerformed del Observador para ayudar a determinar qué tema activó el evento. (estos nombres pueden cambiar dependiendo de su idioma o biblioteca de su elección)
Gracias, WuHo, por tomarse el tiempo para responder mi pregunta. – blueshift
si solo desea que el observador reaccione una vez, no importa cuántos objetos monitoreados planteen el evento, entonces tendrá que tener parte del controlador de eventos ". anular el registro "del observador de todas las demás fuentes una vez que la primera fuente desencadena el evento, o tendrá que decidir con qué frecuencia o qué criterios de tiempo se deben usar para decidir cuándo un evento de otro (o la misma fuente después de un intervalo definido) debe hacer que el observador reaccione de nuevo ...
Es posible que desee utilizar su consejo aquí ya que quiero que el tema se deshabilite después de que plantea su evento Notificar. – blueshift
Si los sujetos del monitor del observador son similares, puede hacer que el observador los supervise a todos, de lo contrario, creo que será mejor que separe el montior, luego seguirá la regla de responsabilidad única.
Considere también el patrón de mediador relacionado.
patrón de mediador define un objeto que encapsula cómo un conjunto de objetos interactúan (Wikipedia)
Más información aquí: http://sourcemaking.com/design_patterns/mediator
también muy parecido @ respuesta de los CDC sobre Mediator Vs Observer Object-Oriented Design Patterns:
El patrón Observer: define un dep one-to-many necesidad de entre objetos para que cuando un objeto cambie de estado, todos sus dependientes sean notificados y actualizados automáticamente.
El patrón Mediator: define un objeto que encapsula cómo interactúan un conjunto de objetos. El mediador promueve el acoplamiento flexible evitando que los objetos se refieran entre sí de forma explícita, y le permite variar su interacción de forma independiente.
- 1. ¿Qué es lo opuesto a "es"?
- 2. ¿Qué es lo opuesto a un nbsp?
- 3. ¿Qué es lo opuesto al escape, en javascript?
- 4. ¿Qué es lo opuesto a jQuery `.get()`?
- 5. ¿Qué es lo opuesto a od (1)?
- 6. ¿Qué patrón de diseño es el opuesto al patrón de fábrica?
- 7. ¿Por qué el patrón del observador debe ser desaprobado?
- 8. Patrón de observador multiproceso
- 9. ¿Qué es lo opuesto a `fixed` in cout?
- 10. F7 en Visual Studio 2010 - ¿Qué es lo opuesto?
- 11. C++ propio patrón Observador
- 12. Patrón de diseño del observador en C++
- 13. ¿Qué es lo opuesto a chr() en Ruby?
- 14. ¿Qué es lo opuesto a Math.pow de JavaScript?
- 15. ¿Qué es lo opuesto a Array # reject in ruby?
- 16. ¿Qué es lo opuesto a @login_required decorator for Django views?
- 17. ¿Qué es lo opuesto a la función de explosión?
- 18. ¿Qué es lo opuesto a la carga lenta?
- 19. ¿Qué es lo opuesto a `git diff HEAD ^`?
- 20. ¿Qué es lo opuesto a la inclusión de Ruby?
- 21. ¿Qué es lo opuesto a una clase base en OOP?
- 22. Lo opuesto a jQuery.param()
- 23. Patrón de diseño del observador: sujetos de hormigón y observadores
- 24. ¿Qué es lo opuesto a: pasar el mouse (al dejar el mouse)?
- 25. Patrón de observador: cuando a
- 26. ¿Patrón de observador o devolución de llamada?
- 27. Patrón de diseño del observador frente a "Oyentes"
- 28. Patrón de observador para el cronómetro
- 29. ¿Cómo hacer lo opuesto a diff?
- 30. ¿Opuesto al protocolo sin estado?
Esto es algo así como un solo observador con Observable múltiple. Entonces, todos los Observable actualizarán un solo Observer cuando su estado cambie, y todavía Observer puede diferenciar diferentes Observable cuando se llama su actualización (Observable o, Object arg). –
Creo que el único cambio aquí es que Observer debe registrarse dinámicamente en el nuevo Observable cuando esté disponible durante el tiempo de ejecución.Significa cuando se menciona el nuevo Observable; entonces esto tiene que ser comunicado a Observer para registrarlo. La otra forma es cuando se menciona el nuevo Observer; este objeto Observer siempre se construye con Observable en su constructor. Entonces, algo así como el constructor de Observable debería aceptar ese solo Observer cuando se abre. –