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.
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) }
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.
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 }
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
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) }
bonusfunc
是适配器;它的存在只是为了适应 func(salary float64) float64
以便满足 bonuscalculator
接口。现在,每当您将 func(salary float64) float64
分配给 bonusfunc
时,您都会获得一个满足 bonuscalculator
bonusfunc
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!