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
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.