Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Komposisi Daripada Warisan dalam Go

Komposisi Daripada Warisan dalam Go

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-30 12:24:02425semak imbas

Composition Over Inheritance in Go

Apabila mereka bentuk perisian, prinsip "komposisi atas warisan" selalunya membawa kepada kod yang lebih fleksibel dan boleh diselenggara. Go, dengan pendekatan uniknya terhadap reka bentuk berorientasikan objek, lebih bersandar pada komposisi dan bukannya warisan. Jom tengok sebabnya.

Mengapa Go Lebih Memilih Komposisi

Dalam bahasa OOP tradisional, warisan membenarkan satu kelas mewarisi gelagat dan sifat daripada yang lain, tetapi ini boleh membawa kepada hierarki yang tegar dan sukar diubah. Go mengelakkan warisan sama sekali dan sebaliknya menggalakkan komposisi—di mana jenis dibina dengan menggabungkan komponen yang lebih kecil dan fokus.

Komposisi dalam Tindakan

Bayangkan kami memodelkan syarikat dengan pelbagai jenis pekerja: ada yang jurutera, ada pengurus dan ada yang pelatih. Daripada mencipta hierarki kelas yang kompleks, kami akan mentakrifkan gelagat tertentu sebagai jenis bebas dan kemudian menyusunnya.

Contoh: Gelagat Pekerja dalam Go

package main

import "fmt"

type Worker interface {
    Work()
}

type Payable struct {
    Salary int
}

func (p Payable) GetSalary() int {
    return p.Salary
}

type Manageable struct{}

func (m Manageable) Manage() {
    fmt.Println("Managing team")
}

type Engineer struct {
    Payable
}

func (e Engineer) Work() {
    fmt.Println("Engineering work being done")
}

type Manager struct {
    Payable
    Manageable
}

func (m Manager) Work() {
    fmt.Println("Managerial work being done")
}

Di sini:

  • Jurutera dan Pengurus membenamkan Payable, memberi mereka Gaji.
  • Pengurus juga membenamkan Boleh Diurus, memberikan mereka kebolehan pengurusan pasukan.
  • Setiap jenis melaksanakan Work() secara individu, memuaskan antara muka Pekerja.

Faedah Komposisi

  • Kesederhanaan: Setiap tingkah laku terkandung dalam strukturnya, menjadikannya mudah untuk dilanjutkan.
  • Fleksibiliti: Jenis atau gelagat baharu boleh ditambah tanpa melanggar kod sedia ada.
  • Kebolehgunaan semula: Tingkah laku adalah modular, jadi kami boleh menggabungkannya dengan mudah dalam cara yang berbeza.

Menggunakan Antara Muka dengan Komposisi

Dalam Go, antara muka dan komposisi berfungsi bersama untuk membenarkan polimorfisme tanpa warisan. Begini cara kami boleh mengendalikan berbilang jenis pekerja dengan satu fungsi:

func DescribeWorker(w Worker) {
    w.Work()
}

func main() {
    engineer := Engineer{Payable{Salary: 80000}}
    manager := Manager{Payable{Salary: 100000}, Manageable{}}
    DescribeWorker(engineer)
    DescribeWorker(manager)
}

Keutamaan Go untuk gubahan berbanding warisan bukan sekadar kelainan bahasa—ia menggalakkan kod yang lebih bersih dan modular yang boleh disesuaikan untuk diubah. Daripada hierarki tegar, anda mendapat komponen yang fleksibel dan boleh diguna semula yang memastikan asas kod anda lincah dan mudah diselenggara.

Atas ialah kandungan terperinci Komposisi Daripada Warisan dalam Go. 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