首页 > 后端开发 > Golang > 函数实现接口时的模式名称是什么?

函数实现接口时的模式名称是什么?

王林
发布: 2024-02-09 20:00:20
转载
1282 人浏览过

函数实现接口时的模式名称是什么?

php小编柚子在这里为大家解答一个常见问题:“函数实现接口时的模式名称是什么?”在PHP中,当一个函数实现了一个接口中的所有方法时,这种模式被称为“接口实现模式”或“接口适配器模式”。接口实现模式是一种常见的设计模式,它允许程序员通过实现接口来定义一组方法,从而达到代码重用和模块化的目的。通过这种模式,我们可以实现接口的多态性,提高代码的灵活性和可维护性。无论是在面向对象编程还是在函数式编程中,接口实现模式都是一种重要的技术手段。

问题内容

在go中,我们可以创建实现接口的函数,例如http.handler接口和具体类型http.handlerfunc。我创建了这种模式的另一个简单示例来计算不同员工的奖金。

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 而不是使用结构来做同样的事情。

这个模式有名字吗?我在很多地方看到它,但从未找到它的名字。

解决方法

这个模式有名字吗?我在很多地方看到它,但从未找到它的名字。

是的,这种模式称为适配器,因为它允许某种“接口”(在本例中为闭包)用作另一种接口(满足 bonuscalculator 的类型)。

在您的示例中,您有一个接口 bonuscalculator

type bonuscalculator interface {
    calculate(salary float64) float64
}
登录后复制

但是,您有 func(salary float64) float64 类型的闭包,并且您希望在需要满足 bonusfunc 的类型时能够传递它们,即具有方法 calculate(salary float64) float64 (闭包没有具有此类名称的方法,因此它们不满足 func(salary float64) float64 类型的闭包,并且您希望在需要满足 bonusfunc 的类型时能够传递它们,即具有方法 calculate(salary float64) float64 (闭包没有具有此类名称的方法,因此它们不满足 bonuscalculator)。

您想要的是将 func(salary float64) float64 改编为 func(salary float64) float64 改编为 bonuscalculator。因此,您定义了一个新类型 bonusfunc,它是适配器。它将派生自您想要适应的闭包类型,然后通过定义一个方法 calculate(salary float64) float64 来满足 bonuscalculator。因此,您定义了一个新类型 bonusfunc,它是适配器。它将派生自您想要适应的闭包类型,然后通过定义一个方法 calculate(salary float64) float64 来满足

的要求,该方法只需调用底层闭包:

type BonusFunc func(salary float64) float64

func (bonus BonusFunc) Calculate(salary float64) float64 {
    return bonus(salary)
}
登录后复制
bonusfunc适配器;它的存在只是为了适应 func(salary float64) float64 以便满足 bonuscalculator 接口。现在,每当您将 func(salary float64) float64 分配给 bonusfunc 时,您都会获得一个满足 bonuscalculatorbonusfunc适配器;它的存在只是为了适应 func(salary float64) float64 以便满足 接口。现在,每当您将 func(salary float64) float64 分配给 bonusfunc 时,您都会获得一个满足 🎜 的值。🎜

以上是函数实现接口时的模式名称是什么?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:stackoverflow.com
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板