我写了一些创造“人类”的代码。人类每 100 毫秒过一次生日,您可以像这样订阅事件:
pers1 := new(Human)
pers1.Init("John")
pers1.Subscribe(func(h Human) { fmt.Printf("Observer1 : %s", h.String()); return })
pers1.Subscribe(func(h Human) { fmt.Printf("Observer2 : %s", h.String()); return })
time.Sleep(3 * time.Second)
输出如下
HUMAN John is born // by init
HUMAN John is now followed by 0x4901a0 // by subscribe
There is now 1 observers
HUMAN John is now followed by 0x490300 // by subscribe
There is now 2 observers
[T+0100ms]
HUMAN John has its birthday // after 100ms : birthday happens
Observer1 : HUMAN : John is 1 // callback
Observer2 : HUMAN : John is 1 // callback
// ... continue for 3 seconds
详细代码在这里,但问题不在 https://goplay.tools/snippet/7qsZ1itcqrS
我的问题如下:
我想创建一个接口Producer对应于产生我可以订阅的事件的事物。
您可以订阅:
过生日的人
可检测湿度变化的湿度传感器
收到邮件的邮件服务器...
在我的例子中,回调函数有一个参数:一个Human。那个年龄变了...
以相同的方式,湿度传感器的给定事件将期望传感器结构。
我的问题是
我认为这样做有意义吗?(这是一个学者问题,没有工作)
如果是,如何。我找不到相关的例子
那将是
type Producer interface{
Subscribe( func( < something variable >) )
}
我无法得到一些工作。我也很难为这个问题找到一个好的标题。随意给我一个更好的。