在Go中,我们可以创建实现接口的函数,如http.Handler
接口和具体类型http.HandlerFunc
.我创建了另一个这种模式的简单示例来计算不同员工的 prize .
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)
}
因此,上面我们用简单的BonusFuncs
实现了接口BonusCalculator
,而不是使用 struct 来做同样的事情.
这种图案有名字吗?我在很多地方看到它,但从来没有找到它的名字.