Me parece que el patrón de diseño de Observer como se describe en GOF es realmente lo mismo que los oyentes que se encuentran en varios kits de herramientas. ¿Hay alguna diferencia entre los conceptos, o los oyentes y los observadores son realmente lo mismo?
(No estoy buscando ninguna implementación específica de lenguaje de computadora, solo quiero entender la diferencia (si existe) 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).
design-patterns
language-agnostic
listener
observer-pattern
JohnnyLambada
fuente
fuente
Respuestas:
Si el término "oyente" se refiere al patrón del Observador o no, dependerá del contexto. Por ejemplo, los "Oyentes de eventos" de Java Swing son parte de una implementación de patrón de Observador, mientras que los "Oyentes de rastreo" .Net no lo son.
No es raro que los autores de marcos 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 en sí.
Con respecto al diseño, la implementación de un patrón dado a menudo estará influenciada por el lenguaje y la plataforma que se utilice. Como tal, una implementación particular del patrón Observador dentro de un marco dado (que puede usar el término "oyente" para describir el papel del Observador concreto) puede diferir ligeramente de la descrita en el libro Patrones de diseño.
fuente
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 Asunto, que contiene una lista de todos los Observadores concretos, luego notifica su lista. Todos los observadores de hormigón, incluido el motor principal, reaccionan según corresponda.
Las implementaciones comunes de los oyentes parecen reaccionar a los eventos externos.
Entonces, diría que el oyente es un caso menos generalizado de un observador.
fuente
Un oyente puede ser una implementación del patrón de observador. Un oyente esencialmente está esperando que ocurra un evento en un objeto dado, que es lo que hace un observador.
Sé que no buscas una respuesta específica del idioma, pero es un poco difícil hablar sobre esto en abstracto. Entonces, si tuviera que investigar esto en .NET, me inclinaría a abrir un ensamblaje que contenga un oyente en .NET Reflector, lo que me permitirá desmontar el ensamblaje y verificar su lógica contra un patrón de diseño.
fuente