2011-02-10 14 views
15

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?

+0

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). –

+0

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. –

Respuesta

13

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.

+2

Mis pensamientos exactamente. Esto todavía me suena como un patrón de observación. –

+0

A menos que solo quiera que el controlador de eventos se ejecute una vez, no importa cuántos editores disparen el evento. –

+1

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

3

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)

+0

Gracias, WuHo, por tomarse el tiempo para responder mi pregunta. – blueshift

0

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 ...

+0

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

1

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.

1

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.

Cuestiones relacionadas