Rumah >pembangunan bahagian belakang >Golang >Pergi dan Warisan: Bilakah Komposisi Mengungguli Warisan untuk Kebolehgunaan Semula Kod?

Pergi dan Warisan: Bilakah Komposisi Mengungguli Warisan untuk Kebolehgunaan Semula Kod?

Susan Sarandon
Susan Sarandonasal
2024-11-10 08:35:03311semak imbas

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

Go and Inheritance: Merangkul Komposisi untuk Kebolehgunaan Semula Kod

Dalam Go, melanjutkan kefungsian melangkaui struktur asas sering didekati menggunakan gubahan dan bukannya warisan. Ini memastikan kejelasan kod dan meminimumkan pertindihan.

Pertimbangkan contoh berikut di mana matlamatnya adalah untuk mentakrifkan struct asas dengan kaedah yang boleh dilanjutkan oleh struct lain:

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
}

Sementara contoh ini berfungsi , ia kelihatan berbelit kerana struktur kitarannya. Untuk mengurangkan pertindihan kod dan mencipta kod yang lebih mudah dibaca, pertimbangkan untuk menggunakan pembenaman.

Pembenaman membolehkan anda mengarang struktur yang melaksanakan antara muka tertentu. Sebagai contoh, anda boleh mencipta antara muka yang sempit untuk membaca dan menulis:

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

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

Dengan mengarang antara muka ini, anda boleh mencipta antara muka ReadWriter:

type ReadWriter interface {
    Reader
    Writer
}

Begitu juga, anda boleh mengarang struct yang laksanakan Pembaca dan Penulis ke dalam struct MyReadWriter:

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
}

The MyReadWriter struct kini melaksanakan antara muka ReadWriter, membolehkan anda menggunakan mana-mana komponen yang melaksanakan Reader atau Writer dalam struct ini.

Teknik benam ini menggalakkan kebolehgunaan semula kod, suntikan kebergantungan dan memudahkan ujian dengan mendayakan pertukaran komponen yang melaksanakan antara muka khusus.

Atas ialah kandungan terperinci Pergi dan Warisan: Bilakah Komposisi Mengungguli Warisan untuk Kebolehgunaan Semula Kod?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn