Heim >Backend-Entwicklung >Golang >Wie lautet der Schemaname, wenn eine Funktion eine Schnittstelle implementiert?
PHP-Editor Youzi ist hier, um eine häufig gestellte Frage zu beantworten: „Wie heißt das Muster, wenn eine Funktion eine Schnittstelle implementiert?“ Wenn eine Funktion in PHP alle Methoden in einer Schnittstelle implementiert, wird dieses Muster als „Bekannt“ bezeichnet als „Schnittstellenimplementierungsmuster“ oder „Schnittstellenadaptermuster“. Das Schnittstellenimplementierungsmuster ist ein gängiges Entwurfsmuster, das es Programmierern ermöglicht, durch die Implementierung einer Schnittstelle eine Reihe von Methoden zu definieren und so die Wiederverwendung und Modularisierung von Code zu erreichen. Durch dieses Modell können wir einen Polymorphismus der Schnittstelle erreichen und die Flexibilität und Wartbarkeit des Codes verbessern. Ob in der objektorientierten Programmierung oder der funktionalen Programmierung, das Schnittstellenimplementierungsmuster ist ein wichtiges technisches Mittel.
In go können wir Funktionen erstellen, die Schnittstellen implementieren, z. B. http.handler
接口和具体类型http.handlerfunc
. Ich habe ein weiteres einfaches Beispiel für dieses Muster erstellt, um Boni für verschiedene Mitarbeiter zu berechnen.
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) }
Oben haben wir also ein einfaches bonusfuncs
实现接口 bonuscalculator
anstelle einer Struktur verwendet, um dasselbe zu tun.
Hat dieses Muster einen Namen? Ich habe es an vielen Orten gesehen, aber seinen Namen nie gefunden.
Hat dieses Muster einen Namen? Ich habe es an vielen Orten gesehen, aber seinen Namen nie gefunden.
Ja, dieses Muster heißt Adapter, weil es die Verwendung einer bestimmten „Schnittstelle“ (in diesem Fall eines Abschlusses) als andere Schnittstelle (ein Typ, der bonuscalculator
erfüllt) ermöglicht.
In Ihrem Beispiel haben Sie eine Schnittstelle bonuscalculator
:
type bonuscalculator interface { calculate(salary float64) float64 }
Sie haben jedoch Abschlüsse vom Typ func(salary float64) float64
und möchten diese übergeben können, wenn Sie einen Typ benötigen, der bonusfunc
erfüllt, also eine Methode haben berechne(salary float64) float64
(Abschlüsse haben keine Methoden mit solchen Namen, daher erfüllen sie nicht func(salary float64) float64
类型的闭包,并且您希望在需要满足 bonusfunc
的类型时能够传递它们,即具有方法 calculate(salary float64) float64
(闭包没有具有此类名称的方法,因此它们不满足 bonuscalculator
).
Was Sie möchten, ist, func(salary float64) float64
an func(salary float64) float64
改编为 bonuscalculator
。因此,您定义了一个新类型 bonusfunc
,它是适配器。它将派生自您想要适应的闭包类型,然后通过定义一个方法 calculate(salary float64) float64
来满足 bonuscalculator
anzupassen. Daher definieren Sie einen neuen Typ bonusfunc
, bei dem es sich um einen Adapter handelt. Es wird von dem Abschlusstyp abgeleitet, den Sie anpassen möchten, und erfüllt dann die Anforderungen von
calculate(salary float64) float64
definiert wird, die einfach den zugrunde liegenden Abschluss aufruft:
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
ist ein Adapter; er existiert nur zur Anpassung an func(salary float64) float64
, um die -Schnittstelle zu erfüllen. Wenn Sie nun func(salary float64) float64
bonusfunc
zuweisen, erhalten Sie einen Wert, der 🎜 erfüllt. 🎜Das obige ist der detaillierte Inhalt vonWie lautet der Schemaname, wenn eine Funktion eine Schnittstelle implementiert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!