Heim > Backend-Entwicklung > Golang > Go und Vererbung: Wann übertrifft die Komposition die Vererbung für die Wiederverwendbarkeit von Code?

Go und Vererbung: Wann übertrifft die Komposition die Vererbung für die Wiederverwendbarkeit von Code?

Susan Sarandon
Freigeben: 2024-11-10 08:35:03
Original
323 Leute haben es durchsucht

Go and Inheritance: When Does Composition Outshine Inheritance for Code Reusability?

Go und Vererbung: Nutzung von Komposition für die Wiederverwendbarkeit von Code

In Go wird die Erweiterung der Funktionalität über Basisstrukturen hinaus oft mithilfe von Komposition statt Vererbung angegangen. Dies sorgt für Codeklarheit und minimiert Duplikate.

Betrachten Sie das folgende Beispiel, bei dem das Ziel darin besteht, eine Basisstruktur mit Methoden zu definieren, die durch andere Strukturen erweitert werden können:

type MyInterface interface {
  SomeMethod(string)
  OtherMethod(string)
}

type Base struct {
  B MyInterface
}

func (b *Base) SomeMethod(x string) {
  b.B.OtherMethod(x)
}

type Extender struct {
  Base
}

func (b *Extender) OtherMethod(x string) {
  // Do something...
}

func NewExtender() *Extender {
  e := Extender{}
  e.Base.B = &e
  return &e
}
Nach dem Login kopieren

Während dieses Beispiel funktioniert Aufgrund seiner zyklischen Struktur erscheint es jedoch verworren. Um die Codeduplizierung zu reduzieren und besser lesbaren Code zu erstellen, sollten Sie die Verwendung von Einbettung in Betracht ziehen.

Einbettung ermöglicht es Ihnen, Strukturen zu erstellen, die bestimmte Schnittstellen implementieren. Sie könnten beispielsweise schmale Schnittstellen zum Lesen und Schreiben erstellen:

type Reader interface {
    Read(p []byte) (n int, err error)
}

type Writer interface {
    Write(p []byte) (n int, err error)
}
Nach dem Login kopieren

Durch die Erstellung dieser Schnittstellen können Sie eine ReadWriter-Schnittstelle erstellen:

type ReadWriter interface {
    Reader
    Writer
}
Nach dem Login kopieren

Auf ähnliche Weise können Sie Strukturen erstellen, die Implementieren Sie Reader und Writer in eine MyReadWriter-Struktur:

type MyReader struct {}
func (r *MyReader) Read(p []byte) (n int, err error) {
    // Implements Reader interface.
}
type MyWriter struct {}
func (w *MyWriter) Write(p []byte) (n int, err error) {
    // Implements Writer interface.
}

type MyReadWriter struct {
    *MyReader
    *MyWriter
}
Nach dem Login kopieren

Die MyReadWriter-Struktur jetzt implementiert die ReadWriter-Schnittstelle, sodass Sie jede Komponente, die Reader oder Writer implementiert, innerhalb dieser Struktur verwenden können.

Diese Einbettungstechnik fördert die Wiederverwendbarkeit von Code, die Abhängigkeitsinjektion und erleichtert das Testen, indem sie den Austausch von Komponenten ermöglicht, die bestimmte Schnittstellen implementieren.

Das obige ist der detaillierte Inhalt vonGo und Vererbung: Wann übertrifft die Komposition die Vererbung für die Wiederverwendbarkeit von Code?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage