strategy pattern patrones observer example diseño design-patterns language-agnostic listener observer-pattern

design-patterns - patrones - strategy pattern



Patrón de diseño del observador frente a "Oyentes" (3)

Me parece que el patrón de diseño Observer como se describe en GOF es realmente lo mismo que los Listeners encontrados en varios toolkits. ¿Hay alguna diferencia entre los conceptos o los Oyentes y Observadores son realmente lo mismo?

(No estoy buscando ninguna implementación específica de lenguaje de computadora, solo quiero entender la diferencia (si la hay) desde el punto de vista del diseño. Sí, sé que hay varias respuestas a preguntas similares en SOF, pero están enraizadas en preguntas específicas sobre idiomas específicos: estoy buscando una respuesta de diseño, no una respuesta de idioma).


Hay una naturaleza bidireccional en la descripción de Observer in Design Patterns por Gamma et. Alabama. (GoF).

En su descripción de Observer, uno de los ConcreteObservers podría indicar un cambio en su Asunto. El Sujeto, que contiene una lista de todos los Observadores de Concreto, luego notifica su lista. Todos los ConcreteObservers, incluido el motor principal, reaccionan según corresponda.

Las implementaciones comunes de los oyentes parecen reaccionar a los eventos del exterior.

Entonces, diría que el Oyente es un caso menos generalizado de un Observador.


Si el término "oyente" se refiere al patrón Observador o no dependerá del contexto. Por ejemplo, los "Escuchadores de eventos" de Java Swing son parte de una implementación de patrón Observer, mientras que los "Escuchadores de seguimiento" de .Net no lo son.

No es raro que los autores del framework asignen diferentes nombres a los componentes que participan en una implementación de patrón dada, pero los nombres de patrones oficiales generalmente se usan cuando se discuten los patrones mismos.

Con respecto al diseño, la implementación de un patrón dado a menudo estará influenciada por el idioma y la plataforma que se utilice. Como tal, una implementación particular del patrón Observer dentro de un marco determinado (que puede pasar a utilizar el término "oyente" para describir el rol del ConcreteObserver) puede diferir ligeramente de la descrita en el libro de Patrones de Diseño.


Un oyente bien puede ser una implementación del patrón de observador. Un oyente está esencialmente esperando que ocurra un evento en un objeto dado, que es lo que hace un observador.

Creo que no busca una respuesta específica de un idioma, pero es un poco difícil hablar de esto en abstracto. Entonces, si tuviera que investigar esto en .NET, me inclinaría a abrir un ensamblado que contenga un detector en .NET Reflector, lo que me permitirá desmontar el ensamblaje y verificar su lógica contra un patrón de diseño.