用函数实现Go语言接口的设计模式名称是什么?
函数类型适配接口的模式名称
你提到的这种用函数类型实现接口的模式,是适配器模式(Adapter Pattern)的一种变体,通常被称为函数适配器(Function Adapter),也有人叫它接口适配函数。
Go标准库里的http.HandlerFunc就是这种模式的典型应用:它把一个func(http.ResponseWriter, *http.Request)类型的函数,适配成了http.Handler接口(该接口要求实现ServeHTTP方法),让普通函数可以直接作为Handler使用,无需额外定义结构体。
你的示例代码里,BonusFunc作为函数类型,通过实现BonusCalculator接口的Calculate方法,把符合func(salary float64) float64签名的函数都适配成了BonusCalculator接口的实现,本质就是这种适配器模式的体现——用一个中间的函数类型,架起普通函数和目标接口之间的桥梁,避免了为每个函数单独编写结构体实现接口的繁琐。
下面是你的示例代码:
type BonusCalculator interface { Calculate(salary float64) float64 } type BonusFunc func(salary float64) float64 func (bonus BonusFunc) Calculate(salary float64) float64 { return bonus(salary) } var ( DeveloperBonus BonusFunc = func(salary float64) float64 { return salary*1.5 + 2500.00 } ManagerBonus BonusFunc = func(salary float64) float64 { return salary * 2.0 } DirectorBonus BonusFunc = func(salary float64) float64 { return salary * 3.3 } ) func CalculateBonus (bonus BonusCalculator, salary float64) float64 { return bonus.Calculate(salary) } func main() { bonus := CalculateBonus(DirectorBonus, 35000.00) fmt.Printf("bonus %.2f", bonus) }
内容的提问来源于stack exchange,提问作者Lawrence
相关产品推荐
相关产品推荐

