You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

用函数实现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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 13:30:42