Il Bridge Pattern in Java

1. Panoramica

La definizione ufficiale per il Bridge design pattern introdotto da Gang of Four (GoF) è di disaccoppiare un'astrazione dalla sua implementazione in modo che le due possano variare indipendentemente.

Ciò significa creare un'interfaccia bridge che utilizzi i principi OOP per separare le responsabilità in diverse classi astratte.

2. Esempio di modello di ponte

Per il pattern Bridge, considereremo due livelli di astrazione; uno è la forma geometrica (come triangolo e quadrato) che è riempita con colori diversi (il nostro secondo livello di astrazione):

Innanzitutto, definiremo un'interfaccia a colori:

public interface Color { String fill(); }

Ora creeremo una classe concreta per questa interfaccia:

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

Creiamo ora una classe Shape astratta che consiste in un riferimento (ponte) all'oggetto Color :

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

Ora creeremo una classe concreta di interfaccia Shape che utilizzerà anche il metodo dell'interfaccia Color :

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

Per questo modello, sarà vera la seguente affermazione:

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

Qui stiamo usando il pattern Bridge e passiamo l'oggetto colore desiderato. Come possiamo notare nell'output, la forma viene disegnata con il colore desiderato:

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

3. Conclusione

In questo articolo, abbiamo esaminato il modello di progettazione del ponte. Questa è una buona scelta nei seguenti casi:

  • Quando vogliamo che una classe astratta genitore definisca l'insieme di regole di base e le classi concrete per aggiungere regole aggiuntive
  • Quando abbiamo una classe astratta che ha un riferimento agli oggetti e ha metodi astratti che saranno definiti in ciascuna delle classi concrete

Il codice sorgente completo per questo esempio è disponibile su GitHub.