高阶函数
高阶函数是指,接收其他函数作为参数或者作为返回值的函数。将匿名函数作为参数传入或者将匿名函数作为返回值,这都是高阶函数的一种。
装饰器模式
装饰器模式,顾名思义其特征在于装饰。在编程语言中它代表着在程序原有的基础上,在不侵入其代码,为其添加更多的功能。
通过高阶函数实现装饰器
package mainimport ("fmt""time")// AddFunc 定义一个方法类型type AddFunc func(int, int) int//Add 基础的Add方法func Add(a, b int) int {return a + b}//AddDecorator 装饰器方法func AddDecorator(f AddFunc) AddFunc {return func(a, b int) int {start := time.Now() // 起始时间c := f(a, b) // 执行乘法运算函数end := time.Since(start) // 函数执行完毕耗时fmt.Printf("--- 执行耗时: %v ---\n", end)return c // 返回计算结果}}func main() {a := 8b := 10decorator := AddDecorator(Add)result := decorator(a, b)fmt.Println(result)}
上述代码中定义了一个AddFunc类型,主要是用于规范我们参数传入和返回。定义了一个具体执行的函数Add。将方法Add传入装饰方法AddDecorator中加以修饰后再将其返回执行。
核心思路就是在被修饰的功能模块(这里是外部传入的乘法函数 f)执行前后加上一些额外的业务逻辑,而又不影响原有功能模块的执行。显然,装饰器模式是遵循 SOLID 设计原则中的开放封闭原则的 —— 对代码扩展开放,对代码修改关闭。
在 main 函数中调用函数Add时,如果要应用装饰器,需要通过装饰器AddDecorator包裹,装饰器返回的是个匿名函数,所以需要再度调用才能真正执行。
