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