Le modèle de pont en Java

1. Vue d'ensemble

La définition officielle du modèle de conception de pont introduit par Gang of Four (GoF) est de découpler une abstraction de son implémentation afin que les deux puissent varier indépendamment.

Cela signifie créer une interface de pont qui utilise les principes de la POO pour séparer les responsabilités en différentes classes abstraites.

2. Exemple de modèle de pont

Pour le modèle Bridge, nous considérerons deux couches d'abstraction; l'un est la forme géométrique (comme le triangle et le carré) qui est remplie de différentes couleurs (notre deuxième couche d'abstraction):

Tout d'abord, nous allons définir une interface de couleur:

public interface Color { String fill(); }

Nous allons maintenant créer une classe concrète pour cette interface:

public class Blue implements Color { @Override public String fill() { return "Color is Blue"; } }

Créons maintenant une classe Shape abstraite qui consiste en une référence (pont) à l' objet Color :

public abstract class Shape { protected Color color; //standard constructors abstract public String draw(); }

Nous allons maintenant créer une classe concrète d' interface Shape qui utilisera également la méthode de l' interface Color :

public class Square extends Shape { public Square(Color color) { super(color); } @Override public String draw() { return "Square drawn. " + color.fill(); } }

Pour ce modèle, l'assertion suivante sera vraie:

@Test public void whenBridgePatternInvoked_thenConfigSuccess() { //a square with red color Shape square = new Square(new Red()); assertEquals(square.draw(), "Square drawn. Color is Red"); }

Ici, nous utilisons le motif Bridge et passons l'objet de couleur souhaité. Comme nous pouvons le noter dans la sortie, la forme est dessinée avec la couleur souhaitée:

Square drawn. Color: Red Triangle drawn. Color: Blue

3. Conclusion

Dans cet article, nous avons examiné le modèle de conception du pont. C'est un bon choix dans les cas suivants:

  • Lorsque nous voulons qu'une classe abstraite parente définisse l'ensemble des règles de base, et les classes concrètes pour ajouter des règles supplémentaires
  • Lorsque nous avons une classe abstraite qui a une référence aux objets, et qu'elle a des méthodes abstraites qui seront définies dans chacune des classes concrètes

Le code source complet de cet exemple est disponible à l'adresse over sur GitHub.