是否存在处理回调机制的设计模式?

时间:2009-06-03 19:56:19

标签: design-patterns oop callback

是否存在处理回调机制的设计模式?

9 个答案:

答案 0 :(得分:22)

那将是Observer Pattern - 来自维基百科

  

观察者模式(观察者的一个子集)   异步发布/订阅   pattern)是一种软件设计模式   其中一个对象,称为   主题,维护一份清单   家属,称为观察员,和   自动通知他们   状态变化,通常是通过调用一个   他们的方法。它主要用于   实现分布式事件处理   系统

答案 1 :(得分:15)

这取决于回调的使用方式。

设计模式就是传达你的意图。

如果您打算允许注册一个或多个回调,并且可以在将来的某个时间点将其作为通知进行调用,那么您正在与Observer进行对话。此外 - 在这种情况下回调的实际调用通常是“可选的”或基于某些刺激触发。 (可能会或可能不会调用回调)

如果您打算传递“要做的事情”,并且在方法中完成(或在以后的过程中用于“做某事”),那么您正在谈论策略。此外 - 实际调用通常会发生。

请注意,完全相同的代码可能是 - 它实际上是关于您如何考虑问题以及您希望其他人如何思考它。

答案 2 :(得分:8)

回调是一种表单策略设计模式

答案 3 :(得分:6)

几个。查看http://people.bu.edu/azs/teaching/cs108/2006fall/callback_pattern.pdf以及以下内容:

最合适的取决于具体情况。您想要使用哪种编程语言?您想要做什么?

答案 4 :(得分:4)

External polymorphism - 一个对象具有对另一个对象的引用和对该对象进行调用的函数。它可以被视为单一类型,因此您可以混合和匹配对象和函数来调用事件。代表就是这种模式的一个例子。这更像是一种C#风格的方法。

Observer pattern - 您使用对象可以实现的接口/基类,并将此接口注册到事件。更多Java风格的方法。

检查我在这里发布的关于委托/外部多态的C ++解决方案的答案: raw function pointer from a bound method

答案 5 :(得分:1)

您的问题非常笼统,我能想到的最常见的答案是在遇到需要回调的问题时使用多态。

Polymorphism允许您以接口(或抽象类)的形式指定有关如何使用回调的软件合同。然后,客户可以自由选择他们认为适合其目的的界面的任何实现。

是否建议使用状态,策略,观察者模式或完全不同的东西,取决于具体情况。

答案 6 :(得分:1)

良好的模式描述是Service Callback design pattern。它是SOA模式目录的一部分,但所描述的模式可以用于非SOA服务的通用组件。

另一个相关模式是Hohpe和Woolf的经典着作“企业集成模式”中描述的Return Address pattern

Josuttis还在他的“实践中的SOA”一书中讨论了回调。他称之为Request/Callback message exchange pattern

答案 7 :(得分:0)

想到观察者模式。

一个对象(suscriber)可以嫌写另一个对象(发布者)。 当发布者更改或更新时,他可以通知所有他的嫌疑人。

根据您使用的语言,您可以指定应在通知时调用的函数。

http://en.wikipedia.org/wiki/Observer_pattern

Design Patterns: Elements of Reusable Object-Oriented Software [Gang of Four]

中有详细描述

答案 8 :(得分:0)

我同意其他关于观察者模式的海报。它专门为此目的而设计。