Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Boleh Melaksanakan Polimorfisme Tanpa Pewarisan Objek?

Bagaimanakah Boleh Melaksanakan Polimorfisme Tanpa Pewarisan Objek?

DDD
Lepaskan: 2024-11-15 12:48:02
asal
227 orang telah melayarinya

How Can Go Implement Polymorphism Without Object Inheritance?

Memahami Polimorfisme dalam Go

Polymorphism, keupayaan objek untuk mengambil bentuk yang berbeza, dilaksanakan dalam antara muka Go through.

Masalah:

Pertimbangkan senario hipotetikal dengan struct BaseTX yang mewakili transaksi dan dua jenis transaksi khusus: RewardTX dan AllowanceTX. AllowanceTX memanjangkan BaseTX, menambah medan tambahan. Tugasnya adalah untuk melaksanakan fungsi yang beroperasi pada kedua-dua jenis transaksi, mensiri dan menyimpan data masing-masing menggunakan json.Marshal(). Walau bagaimanapun, pelaksanaan semasa hanya menyerikan medan daripada struct BaseTX, mengetepikan medan tambahan dalam AllowanceTX.

Begini Cara Modern Go Mendekati Ini:

Go tidak menyokong tradisional pewarisan objek, bergantung semata-mata pada antara muka untuk polimorfisme. Untuk menyelesaikan isu ini, pertimbangkan pelaksanaan alternatif berikut:

type TXapi interface {
    logicAndSaveTX()
}

type Metadata struct {
    Field1 string
    Field2 string
}

type RewardTX struct {
    Metadata
}

func (tx RewardTX) logicAndSaveTX() {
    // Logic to overwrite or modify `Metadata` fields ...
    fmt.Printf("saved this object: %+v \n", tx)
}

type AllowanceTX struct {
    Metadata
    AddField string
}

func (tx AllowanceTX) logicAndSaveTX() {
    // Logic to overwrite or modify `Metadata` fields ...
    // Additional logic for `AddField` ...
    fmt.Printf("saved this object: %+v \n", tx)
}
Salin selepas log masuk

Dalam pendekatan ini, Metadata menjadi struktur kendiri, membenarkan gelagat khusus pada medan Metadata terbenam dalam setiap jenis RewardTX atau AllowanceTX. Kaedah logicAndSaveTX() kini beroperasi secara khusus pada jenis masing-masing, mengendalikan kedua-dua medan biasa dan unik dengan sewajarnya.

Polymorphism in Go dicapai melalui antara muka, menyediakan cara yang fleksibel dan cekap untuk mengendalikan pelbagai jenis objek dengan gelagat yang serupa. Dengan menerima pendekatan ini, anda mengelakkan pengehadan warisan tradisional dan menggunakan sepenuhnya kekuatan reka bentuk berasaskan antara muka Go.

Atas ialah kandungan terperinci Bagaimanakah Boleh Melaksanakan Polimorfisme Tanpa Pewarisan Objek?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan