Maison > développement back-end > Golang > le corps du texte

Quel est le nom du schéma lorsqu'une fonction implémente une interface ?

王林
Libérer: 2024-02-09 20:00:20
avant
1221 Les gens l'ont consulté

Quel est le nom du schéma lorsquune fonction implémente une interface ?

L'éditeur PHP Youzi est là pour répondre à une question courante : "Quel est le nom du pattern lorsqu'une fonction implémente une interface ?" En PHP, lorsqu'une fonction implémente toutes les méthodes d'une interface, ce pattern est appelé Connu. comme « modèle d'implémentation d'interface » ou « modèle d'adaptateur d'interface ». Le modèle d'implémentation d'interface est un modèle de conception courant qui permet aux programmeurs de définir un ensemble de méthodes en implémentant une interface, réalisant ainsi la réutilisation et la modularisation du code. Grâce à ce modèle, nous pouvons réaliser le polymorphisme de l'interface et améliorer la flexibilité et la maintenabilité du code. Que ce soit en programmation orientée objet ou en programmation fonctionnelle, le modèle d'implémentation d'interface est un moyen technique important.

Contenu de la question

En go, nous pouvons créer des fonctions qui implémentent des interfaces, telles que http.handler接口和具体类型http.handlerfunc. J'ai créé un autre exemple simple de ce modèle pour calculer les primes pour différents employés.

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


Copier après la connexion

Donc ci-dessus, nous avons simple bonusfuncs 实现接口 bonuscalculator au lieu d'utiliser une structure pour faire la même chose.

Est-ce que ce modèle a un nom ? Je l'ai vu dans de nombreux endroits mais je n'ai jamais trouvé son nom.

Solution

Ce modèle a-t-il un nom ? Je l'ai vu dans de nombreux endroits mais je n'ai jamais trouvé son nom.

Oui, ce modèle s'appelle Adapter car il permet à une certaine "interface" (dans ce cas, une fermeture) d'être utilisée comme une autre interface (un type qui satisfait bonuscalculator ).

Dans votre exemple vous avez une interface bonuscalculator :

type bonuscalculator interface {
    calculate(salary float64) float64
}
Copier après la connexion

Cependant, vous avez des fermetures de type func(salary float64) float64 et vous voulez pouvoir les transmettre lorsque vous avez besoin d'un type qui satisfait bonusfunc, c'est-à-dire avoir une méthode calculate(salary float64) float64 (les fermetures n'ont pas de méthodes avec de tels noms, donc elles ne satisfont pas func(salary float64) float64 类型的闭包,并且您希望在需要满足 bonusfunc 的类型时能够传递它们,即具有方法 calculate(salary float64) float64 (闭包没有具有此类名称的方法,因此它们不满足 bonuscalculator).

Ce que vous voulez, c'est adapter func(salary float64) float64 à func(salary float64) float64 改编为 bonuscalculator。因此,您定义了一个新类型 bonusfunc,它是适配器。它将派生自您想要适应的闭包类型,然后通过定义一个方法 calculate(salary float64) float64 来满足 bonuscalculator. Par conséquent, vous définissez un nouveau type bonusfunc, qui est un adaptateur. Elle sera dérivée du type de fermeture que vous souhaitez adapter, puis satisfera aux exigences de

en définissant une méthode calculate(salary float64) float64 qui appelle simplement la fermeture sous-jacente :

type BonusFunc func(salary float64) float64

func (bonus BonusFunc) Calculate(salary float64) float64 {
    return bonus(salary)
}
Copier après la connexion
bonusfunc适配器;它的存在只是为了适应 func(salary float64) float64 以便满足 bonuscalculator 接口。现在,每当您将 func(salary float64) float64 分配给 bonusfunc 时,您都会获得一个满足 bonuscalculatorbonusfunc est un adaptateur ; il existe uniquement pour s'adapter à func(salary float64) float64 afin de satisfaire l'interface . Désormais, chaque fois que vous attribuez func(salary float64) float64 à bonusfunc, vous obtiendrez une valeur qui satisfait 🎜 . 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!