Dekorierermuster (Funktionen) hat many benefits:Decorator Funktionen in Go
Es ist sehr nützlich, wenn ein Verfahren viele orthogonale Bedenken hat ... Das heißt, keiner dieser Bedenken beziehen sich, anders als das wir tun wollen alle (oder einige) von ihnen, wann immer wir unsere Methode nennen. Dies ist, wo das Decorator-Muster wirklich hilft.
Durch die Implementierung des Decorator-Musters haben wir den Open-Closed-Principal. Unsere Methode ist offen für zukünftige Erweiterungen, aber für zukünftige Änderungen geschlossen. Es gibt viele groovige Vorteile, um dem Prinzip "offen-geschlossen" zu folgen.
Alle Beispiele, die ich gefunden habe, sind jedoch sehr kompliziert (z. B. HTTP-Server mit vielen Middlewares schreiben). Dies macht es mir schwer, das Prinzip woanders anzuwenden. Ich brauche etwas, das ich leicht anprobieren kann, um meinen Kopf darum zu wickeln.
Kann jemand mir ein einfacheres Beispiel geben, das am besten veranschaulichen kann, wie man Dekoratormuster (Funktionen) in Go bitte tut?
This example by Alex Alehano, ist zu einfach, um praktisch verwendet zu werden. Ich brauche etwas, das dies illustriert:
func Decorate(c Decorated, ds ...Decorator) Decorated {
decorated := c
for _, decorate := range ds {
decorated = decorate(decorated)
}
return decorated
}
Eine String-Manipulation nach verschiedener Option/Anweisung, zum Beispiel an den oberen, zu niedrigeren, zu base64, etc, würde IMO das beste Beispiel sein, und das Hinzufügen von Präfix/Suffix auch als "This technique proves especially valuable if the decorators themselves are parameterized".
Dies ist genau das Dekorator-Funktionen-Muster in Go, das ich sehr gesucht habe! – xpt
Wenn ich richtig verstehe, 'AppendDecorator', wie es definiert ist, kann nur als erster Vorgang zum Anhängen verwendet werden? – RayfenWindspear
https://play.golang.org/p/rrBnAJOIc2 nein, 'AppendDecorator' ist ein wenig anders als die anderen, in denen Sie es aufrufen müssen, um den tatsächlichen Dekorator zurückzugeben, der dann mit der gewünschten Funktion aufgerufen wird schmücken. Im Grunde erstellt es nur einen Abschluss für den String, den Sie an "AppendDecorator" übergeben und gibt einen neuen Decorator zurück, der dann Zugriff auf diesen String hat ... – mkopriva