Maison > développement back-end > Golang > Comment les classes abstraites peuvent-elles être implémentées dans Go ?

Comment les classes abstraites peuvent-elles être implémentées dans Go ?

DDD
Libérer: 2024-11-29 10:50:11
original
489 Les gens l'ont consulté

How Can Abstract Classes Be Implemented in Go?

Implémentation de classes abstraites dans Go

Dans Go, les classes abstraites ne sont pas prises en charge nativement. Cependant, il est possible d'émuler le comportement d'une classe abstraite en utilisant une approche qui implique :

  1. Définir une interface avec les méthodes abstraites souhaitées.
  2. Créer un type avec un récepteur intégré qui remplit les interface et fournit des implémentations par défaut pour le méthodes.

Exemple

Considérez le code suivant, qui définit un démon de type abstrait avec les méthodes start et doWork :

type Daemon interface {
    start(time.Duration)
    doWork()
}
Copier après la connexion

Pour fournir des implémentations par défaut, nous pouvons créer un type abstrait (par exemple, AbstractDaemon) qui intègre l'interface Daemon et fournit implémentations par défaut pour les méthodes :

type AbstractDaemon struct {
    Daemon
}

func (a *AbstractDaemon) start(duration time.Duration) {
    ticker := time.NewTicker(duration)

    // this will call daemon.doWork() periodically
    go func() {
        for {
            <-ticker.C
            a.doWork()
        }
    }()
}
Copier après la connexion

Types concrets

Maintenant, nous pouvons créer des types concrets qui héritent du type AbstractDaemon et fournir des implémentations pour la méthode doWork :

type ConcreteDaemonA struct {
    *AbstractDaemon
    foo int
}

func (a *ConcreteDaemonA) doWork() {
    a.foo++
    fmt.Println("A: ", a.foo)
}

type ConcreteDaemonB struct {
    *AbstractDaemon
    bar int
}

func (b *ConcreteDaemonB) doWork() {
    b.bar--
    fmt.Println("B: ", b.bar)
}
Copier après la connexion

Utilisation

Nous pouvons utiliser ces types concrets pour créer des instances et appeler leurs méthodes :

var dA Daemon = newConcreteDaemonA()
var dB Daemon = newConcreteDaemonB()

dA.start(1 * time.Second)
dB.start(5 * time.Second)

time.Sleep(100 * time.Second)
Copier après la connexion

Cette approche fournit un mécanisme d'implémentation de classes abstraites dans Go, permettant des implémentations de méthodes par défaut et un héritage multiple via l'intégration.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal