package main
import "fmt"
// 回调接口
type Callback interface {
OnEvent(string) // 定义回调方法
}
// 发布者对象
type Publisher struct {
callback Callback
}
// 设置回调对象
func (p *Publisher) SetCallback(callback Callback) {
p.callback = callback
}
// 触发事件并调用回调方法
func (p *Publisher) TriggerEvent(data string) {
if p.callback != nil {
p.callback.OnEvent(data)
}
}
// 实现回调接口的对象
type CallbackImpl struct{}
// 实现回调方法
func (c *CallbackImpl) OnEvent(data string) {
fmt.Println("CallbackImpl received event:", data)
}
func main() {
// 创建发布者对象
publisher := &Publisher{}
// 创建回调对象
callbackImpl := &CallbackImpl{}
// 设置回调对象
publisher.SetCallback(callbackImpl)
// 触发事件,回调被调用
publisher.TriggerEvent("Event data")
}
在这个例子中,我们定义了一个Callback接口,包含了一个OnEvent方法。然后,我们创建了一个Publisher对象,该对象具有一个回调对象的引用。通过调用SetCallback方法,我们可以将一个实现了Callback接口的对象作为回调对象设置到Publisher中。最后,通过调用TriggerEvent方法,可以触发事件,从而调用回调对象的OnEvent方法。
这种模式的好处是可以将回调的逻辑从主体逻辑中分离出来,实现了解耦。在GoFrame中,这种模式常见于事件处理、异步任务等场景。例如,HTTP框架中的中间件、数据库操作中的钩子函数等,都可以通过接口实现回调处理。
转载请注明出处:http://www.zyzy.cn/article/detail/7671/GoFrame