有没有一种处理回调机制的设计模式?
这是 观察者模式 - 来自维基百科
观察者模式(异步发布/订阅模式的子集)是一种软件设计模式,其中一个称为主题的对象维护其称为观察者的依赖项列表,并通过调用它们的某个方法自动通知它们任何状态更改。它主要用于实现分布式事件处理系统。
这取决于回调函数的使用方式。
设计模式都是关于传达您的意图。
如果您打算注册一个或多个回调并且它们可以在“将来的某个时间点”作为通知进行调用,那么您正在谈论观察者模式。此外,这种情况下回调的实际调用通常是“可选的”或基于某些刺激触发。(回调可能永远不会被调用)
如果您想传入“要执行的内容”,并且该方法中会执行它(或在稍后的过程中用于“执行某些操作”),则您正在谈论策略模式。此外,实际的调用通常会发生。
请注意,完全相同的代码可能是两种模式之一,这取决于您对问题的思考方式以及希望他人如何考虑。
多种设计模式可供选择。请查看http://people.bu.edu/azs/teaching/cs108/2006fall/callback_pattern.pdf以及以下内容:
最适合的取决于具体情况。您想使用什么编程语言,以及您想要做什么?
回调函数是一种策略设计模式
外部多态性 - 一个对象具有对另一个对象的引用和调用该对象函数的功能。它可以被视为单个类型,因此可以混合和匹配对象和要调用的函数以响应事件。委托是这种模式的一个例子。这更像是C#风格的方法。
观察者模式 - 您可以使用实现接口/基类的对象,并将此接口注册到事件中。更像是Java风格的方法。
在此处检查我发布的答案以获取关于委托/外部多态性的C++解决方案: 从绑定方法获取原始函数指针
你的问题相当一般化,我能想到最一般化的回答就是在需要回调的问题上使用多态。
多态能够让你通过接口(或抽象类)来规定回调函数的软件契约,然后客户端可以自由选择适合他们目的的任何接口实现。
无论是否建议使用状态、策略、观察者模式,或者完全不同的东西,这真的取决于具体情况。
观察者模式是一个很好的例子。
一个对象(订阅者)可以订阅另一个对象(发布者)。 当发布者发生变化或更新时,他可以通知所有的订阅者。
根据您使用的语言,您可以指定在通知时应调用的函数。
http://en.wikipedia.org/wiki/Observer_pattern
在《设计模式:可复用的面向对象软件元素》[四人帮]中有详细描述。
我也同意其他帖子中提到的观察者模式。它是专门为此目的设计的。
“命令(命令模式)是回调函数的面向对象替代方案。”