Rumah >pembangunan bahagian belakang >Golang >Apakah nama skema apabila fungsi melaksanakan antara muka?

Apakah nama skema apabila fungsi melaksanakan antara muka?

王林
王林ke hadapan
2024-02-09 20:00:201282semak imbas

Apakah nama skema apabila fungsi melaksanakan antara muka?

Editor PHP Youzi berada di sini untuk menjawab soalan biasa: "Apakah nama corak apabila fungsi melaksanakan antara muka Dalam PHP, apabila fungsi melaksanakan semua kaedah dalam antara muka, corak ini dipanggil Diketahui?" sebagai "corak pelaksanaan antara muka" atau "corak penyesuai antara muka". Corak pelaksanaan antara muka ialah corak reka bentuk biasa yang membolehkan pengaturcara mentakrifkan satu set kaedah dengan melaksanakan antara muka, dengan itu mencapai penggunaan semula kod dan modularisasi. Melalui model ini, kita boleh mencapai polimorfisme antara muka dan meningkatkan fleksibiliti dan kebolehselenggaraan kod. Sama ada dalam pengaturcaraan berorientasikan objek atau pengaturcaraan berfungsi, corak pelaksanaan antara muka adalah cara teknikal yang penting.

Kandungan soalan

Seterusnya, kita boleh mencipta fungsi yang melaksanakan antara muka, seperti http.handler接口和具体类型http.handlerfunc. Saya mencipta satu lagi contoh mudah corak ini untuk mengira bonus untuk pekerja yang berbeza.

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)
}


Jadi di atas kita mempunyai bonusfuncs 实现接口 bonuscalculator yang mudah dan bukannya menggunakan struct untuk melakukan perkara yang sama.

Adakah corak ini mempunyai nama? Saya telah melihatnya di banyak tempat tetapi tidak pernah menemui namanya.

Penyelesaian

Adakah corak ini mempunyai nama? Saya telah melihatnya di banyak tempat tetapi tidak pernah menemui namanya.

Ya, corak ini dipanggil Adapter kerana ia membenarkan "antara muka" tertentu (dalam kes ini, penutupan) digunakan sebagai antara muka lain (jenis yang memuaskan bonuscalculator ).

Dalam contoh anda, anda mempunyai antara muka bonuscalculator:

type bonuscalculator interface {
    calculate(salary float64) float64
}

Walau bagaimanapun, anda mempunyai penutupan jenis func(gaji float64) float64 dan anda mahu dapat melepasinya apabila anda memerlukan jenis yang memenuhi bonusfunc, iaitu mempunyai kaedah hitung(gaji float64) float64 (Penutupan tidak mempunyai kaedah dengan nama sedemikian, jadi ia tidak memuaskan func(salary float64) float64 类型的闭包,并且您希望在需要满足 bonusfunc 的类型时能够传递它们,即具有方法 calculate(salary float64) float64 (闭包没有具有此类名称的方法,因此它们不满足 bonuscalculator).

Apa yang anda mahu ialah menyesuaikan func(gaji float64) float64 kepada func(salary float64) float64 改编为 bonuscalculator。因此,您定义了一个新类型 bonusfunc,它是适配器。它将派生自您想要适应的闭包类型,然后通过定义一个方法 calculate(salary float64) float64 来满足 bonuscalculator. Oleh itu, anda menentukan jenis bonusfunc baharu, iaitu penyesuai. Ia akan diperoleh daripada jenis penutupan yang ingin anda sesuaikan, dan kemudian memenuhi keperluan

dengan mentakrifkan kaedah calculate(salary float64) float64 yang hanya memanggil penutupan asas:

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 ialah penyesuai; ia wujud hanya untuk menyesuaikan diri dengan func(gaji float64) float64 untuk memenuhi antara muka

. Sekarang, apabila anda memberikan func(gaji float64) float64 kepada bonusfunc, anda akan mendapat nilai yang memuaskan 🎜 . 🎜

Atas ialah kandungan terperinci Apakah nama skema apabila fungsi melaksanakan antara muka?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam