|
|
@@ -11,12 +11,14 @@ draft: true
|
|
|
interface and its function wrapper defination
|
|
|
|
|
|
```golang
|
|
|
+// 事件接口
|
|
|
interface IEventHandler {
|
|
|
DoSomething() int
|
|
|
}
|
|
|
|
|
|
+// 單接口的函數 Wrapper
|
|
|
type IEventHandlerWrapper func() int
|
|
|
-
|
|
|
+// 實現事件接口
|
|
|
func (ehw IEventHandlerWrapper)DoSomething() int {
|
|
|
return ehw()
|
|
|
}
|
|
|
@@ -24,14 +26,16 @@ func (ehw IEventHandlerWrapper)DoSomething() int {
|
|
|
|
|
|
### Example
|
|
|
|
|
|
-在某处定义
|
|
|
-
|
|
|
+注冊中心
|
|
|
```golang
|
|
|
-func RegisterEvent(ev string, handler IEventHandler);
|
|
|
+// 注冊事件處理函數
|
|
|
+var registered map[string]IEventHandler
|
|
|
+func RegisterEvent(ev string, handler IEventHandler) {
|
|
|
+ registered[ev] = handler
|
|
|
+}
|
|
|
```
|
|
|
|
|
|
-可以更灵活处理
|
|
|
-
|
|
|
+注冊事件處理函數
|
|
|
```golang
|
|
|
type SomeLogic struct {}
|
|
|
|
|
|
@@ -44,11 +48,13 @@ func (sl *SomeLogic) DoSomething() int {
|
|
|
|
|
|
// register
|
|
|
|
|
|
-// 1.
|
|
|
+// 方式1.
|
|
|
RegisterEvent("something", &SomeLogic{})
|
|
|
|
|
|
-// 2. write inplace.
|
|
|
+// 方式2. write inplace.
|
|
|
RegisterEvent("others", IEventHandlerWrapper(func()int{
|
|
|
return 0
|
|
|
}))
|
|
|
-```
|
|
|
+```
|
|
|
+
|
|
|
+使事件處理函數及其類似的應用場景同時支持 interface implementation 和 lambda
|