1. Qu'est-ce que le motif de pont

1.1 Définition et concept

Le motif de pont, également connu sous le nom de motif de pont, est un type de motif de conception structurelle qui découple l'abstraction et l'implémentation, leur permettant de varier indépendamment. En termes simples, le motif de pont est une solution qui sépare l'abstraction de l'implémentation.

1.2 Objectif et effet du motif de pont

Le principal objectif du motif de pont est de découpler la partie abstraction de sa partie implémentation afin qu'elles puissent changer et s'étendre indépendamment. Cela est accompli en établissant une classe de pont abstraite liée à une classe d'implémentation concrète.

2. Caractéristiques et avantages du motif de pont

Certaines des principales caractéristiques et avantages du motif de pont comprennent :

  • Évolutivité accrue du système. L'abstraction et l'implémentation peuvent être étendues indépendamment l'une de l'autre.
  • Conformité au principe Ouvert/Fermé. La partie abstraction et la partie implémentation peuvent être étendues indépendamment l'une de l'autre.
  • Transparence des détails de l'implémentation pour le client, permettant de cacher les détails de l'implémentation à l'utilisateur.

3. Scénarios d'application du motif de pont

  • Lorsque vous souhaitez séparer l'implémentation d'un objet complexe de son abstraction, le motif de pont peut être utilisé. Cela peut avoir un impact positif sur les performances du code existant, en particulier lorsque le programme n'utilise qu'une partie de l'objet à l'exécution.
  • Lorsque vous avez besoin de partager des états d'implémentation spécifiques entre plusieurs objets, mais pour le code client, ils doivent apparaître comme des classes indépendantes.

4. Implémentation du motif de pont en Golang

4.1 Introduction au diagramme de classes UML

Motif de pont en Golang

4.2 Étapes d'implémentation détaillées

4.2.1 Définir l'interface du rôle abstrait

Tout d'abord, nous définissons une interface DrawAPI, le code spécifique est le suivant :

// Interface du rôle abstrait
type DrawAPI interface {
    DrawACircle(rayon, x, y int)
}

4.2.2 Implémenter la classe de rôle concret

Ensuite, nous définissons deux classes, RedCircle et BlueCircle, qui implémentent les méthodes de l'interface DrawAPI :

// Classe de rôle concret
type RedCircle struct {}

func (c *RedCircle) DrawACircle(rayon, x, y int) {
    // logique de dessin d'un cercle rouge
}

type BlueCircle struct {}

func (c *BlueCircle) DrawACircle(rayon, x, y int) {
    // logique de dessin d'un cercle bleu
}

4.2.3 Définir l'interface du pont abstrait

Définir l'interface du pont de forme :

// Interface du pont abstrait
type Shape interface {
    Draw()
}

4.2.4 Implémenter la classe de pont concret

Implémentez la classe Circle, qui implémente l'interface Shape et contient un objet de type DrawAPI interface :

// Classe de pont concret
type Circle struct {
    x, y, rayon int
    drawAPI     DrawAPI
}

func (c *Circle) Draw() {
    c.drawAPI.DrawACircle(c.rayon, c.x, c.y)
}

4.2.5 Exemple d'invocation client

func main() {
    cercleRouge := &Circle{100, 100, 10, new(RedCircle)}
    cercleBleu := &Circle{100, 100, 10, new(BlueCircle)}

    cercleRouge.Draw()
    cercleBleu.Draw()
}

De cette manière, nous avons implémenté le motif de pont en Golang.