码迷,mamicode.com
首页 > 编程语言 > 详细

go语言 装饰器模式

时间:2019-06-23 01:28:17      阅读:136      评论:0      收藏:0      [点我收藏+]

标签:after   port   decorator   set   ora   imp   err   make   ptr   

package decorator

import (
"fmt"
"reflect"
)

func Decorator(decoPtr, fn interface{}) (err error) {
var decoratedFunc, targetFunc reflect.Value

decoratedFunc = reflect.ValueOf(decoPtr).Elem()
targetFunc = reflect.ValueOf(fn)

v := reflect.MakeFunc(targetFunc.Type(),
func(in []reflect.Value) (out []reflect.Value) {
fmt.Println("before")
out = targetFunc.Call(in)
fmt.Println("after")
return
})

decoratedFunc.Set(v)
return
}
package decorator

import (
"fmt"
"testing"
)

func foo(a, b, c int) int {
fmt.Printf("%d, %d, %d \n", a, b, c)
return a + b + c
}

func bar(a, b string) string {
fmt.Printf("%s, %s \n", a, b)
return a + b
}

func TestDecorator(t *testing.T) {
//type MyFoo func(int, int, int) int
//var myfoo MyFoo
//Decorator(&myfoo, foo)
//myfoo(1, 2, 3)
mybar := bar
Decorator(&mybar, bar)
mybar("hello,", "world!")

}

go语言 装饰器模式

标签:after   port   decorator   set   ora   imp   err   make   ptr   

原文地址:https://www.cnblogs.com/w3liu/p/11070960.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!