Heim  >  Artikel  >  Backend-Entwicklung  >  Wie lautet der Schemaname, wenn eine Funktion eine Schnittstelle implementiert?

Wie lautet der Schemaname, wenn eine Funktion eine Schnittstelle implementiert?

王林
王林nach vorne
2024-02-09 20:00:201223Durchsuche

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.

Frageninhalt

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.

Lösung

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

, indem eine Methode 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 时,您都会获得一个满足 bonuscalculatorbonusfunc 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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen