2009-06-03 9 views

Respuesta

19

Ese sería el Observer Pattern - De Wikipedia

El patrón de observador (un subconjunto de la asíncrono de publicación/suscripción patrón) es un patrón de diseño de software en el que un objeto, denominado objeto , mantiene una lista de sus dependientes , llamados observadores, y los notifica automáticamente de cualquier cambio de estado , generalmente llamando a de sus métodos. Se utiliza principalmente para implementar implementación distribuida de eventos de sistemas .

+3

El patrón Observer es similar al patrón de publicación y suscripción, no a la devolución de llamada. Por una vez, los módulos Observer no son "devueltos" después de llamar al módulo Observable. El Observable llama a los observadores para notificarles de los cambios de estado. –

9

de devolución de llamada es una forma estrategia patrón de diseño

+1

Estoy de acuerdo en que la estrategia es una mejor analogía que Observer. Para mí, una devolución de llamada sería un puntero de función o un cierre. Como esos constructos no están disponibles en todos los idiomas, una estrategia es la aproximación al armario. Dependiendo de su perspectiva, tiene la (mala) fortuna de tener que crear las diversas interfaces requeridas por su patrón de diseño de elección. – Patrick

4

External polymorphism - Un objeto tiene una referencia a un otro objeto y una función para llamar a ese objeto. Se puede ver como un solo tipo, por lo tanto, puede mezclar y combinar objetos y funciones para llamar al evento. Los delegados son un ejemplo de este patrón. Esto es más un enfoque de estilo C#.

Observer pattern - Utiliza una clase de interfaz/base que un objeto puede implementar y registrar esta interfaz en un evento. Más de un enfoque de estilo Java.

Comprobar la respuesta que he publicado aquí por una solución de C++ para los delegados/polimorfismo externa: raw function pointer from a bound method

15

Depende de cómo se utiliza la devolución de llamada.

Los patrones de diseño tienen que ver con comunicar su intención.

Si tenía la intención de permitir el registro de una o más devoluciones de llamada y llamarlas como notificaciones "en algún momento en el futuro", está hablando de Observer. Además, la invocación real de la devolución de llamada en este caso suele ser "opcional" o se desencadena en función de algún estímulo. (Las devoluciones de llamada pueden o no pueden ser llamadas)

Si pretendía pasar "algo que hacer", y eso se hace en el método (o se usa para "hacer algo" durante un proceso posterior) ' Hablando de estrategia. Además, la invocación real generalmente ocurre.

Tenga en cuenta que el mismo código podría ser cualquiera, se trata realmente de cómo está pensando en el problema y cómo quiere que otros lo piensen.

+0

Me gusta esta respuesta más –

1

Su pregunta es muy general, y la respuesta más general que puedo pensar es usar polimorfismo cuando tenga un problema que requiera una devolución de llamada.

El polimorfismo le permite especificar un contrato de software en forma de una interfaz (o una clase abstracta) sobre cómo se usará la devolución de llamada. Entonces los clientes son libres de elegir cualquier implementación de la interfaz que consideren adecuada para su propósito.

Si es aconsejable utilizar el estado, la estrategia, el patrón del observador o algo completamente diferente realmente depende de las circunstancias.

0

Estoy de acuerdo con los otros pósters sobre el patrón Observer también. Está específicamente diseñado para este propósito.

1

Una buena descripción de patrón es Service Callback design pattern. Es parte de un catálogo de patrones SOA, pero el patrón como se describe se puede emplear con componentes genéricos que no son servicios SOA.

Otro patrón relacionado es el Return Address pattern descrito en el libro clásico "Enterprise Integration Patterns" por Hohpe y Woolf.

Josuttis también habla de devolución de llamada en su libro "SOA in Practice". Él lo llama el Request/Callback message exchange pattern.

Cuestiones relacionadas