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

Susan Sarandon
Lepaskan: 2024-11-10 08:35:03
asal
249 orang telah melayarinya

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
}
Salin selepas log masuk

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)
}
Salin selepas log masuk

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

type ReadWriter interface {
    Reader
    Writer
}
Salin selepas log masuk

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
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan