是否存在处理回调机制的设计模式?
答案 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)
我同意其他关于观察者模式的海报。它专门为此目的而设计。