BRIDGE PATTERN

Il pattern Bridge torna particolarmente utile quando è necessario separare un’astrazione dalla sua implementazione in modo che entrambe possano variare in modo indipendente. Questo tipo di design pattern rientra in quelli strutturali in quanto disaccoppia la classe implementata e la classe astratta fornendo un ponte intermedio.

Bridge

Dimostreremo l’uso del Bridge tramite il seguente esempio in cui un cerchio può essere disegnato di diversi colori usando lo stesso metodo della classe astratta, ma utilizzando classi implementate diverse.

DIAGRAMMA UML

uml

 

IMPLEMENTAZIONE BRIDGE

Passo 1: Creiamo l’interfaccia

public interface DisegnaAPI {
    public void disegnaCerchio(int raggio, int x, int y);
}

Passo 2: Creiamo le classi concrete che implementano L’interfaccia

CerchioRosso.java

public class CerchioRosso implements DisegnaAPI {
    @Override
    public void disegnaCerchio(int raggio, int x, int y) {
        System.out.println("[CERCHIOROSSO]: Cerchio disegnato! ");
        System.out.println("[CERCHIOROSSO]: COLORE: ROSSO, RAGGIO: " + raggio + ", X: " + x + ", Y:" + y + "]");
    }
}

CerchioVerde.java

public class CerchioVerde implements DisegnaAPI {
    @Override
    public void disegnaCerchio(int raggio, int x, int y) {
        System.out.println("[CERCHIOVERDE]: Cerchio disegnato! ");
        System.out.println("[CERCHIOVERDE]: COLORE: VERDE, RAGGIO: " + raggio + ", X: " + x + ", Y:" + y + "]");
    }
}

Passo 3: Creiamo la classe astratta Figura

public abstract class Figura {
    protected DisegnaAPI disegnaAPI;

    protected Figura(DisegnaAPI disegnaAPI){
        this.disegnaAPI = disegnaAPI;
    }
    public abstract void disegna();
}

Passo 4: Creiamo la classe che estende Figura

public class Cerchio extends Figura {
    private int x, y, raggio;

    public Cerchio(int x, int y, int radius, DisegnaAPI disegnaAPI) {
        super(disegnaAPI);
        this.x = x;
        this.y = y;
        this.raggio = radius;
    }

    public void disegna() {
        disegnaAPI.disegnaCerchio(raggio,x,y);
    }
}

Passo 5: Creiamo il Main

public class Main {
    public static void main(String[] args) {
        Figura cerchioRosso = new Cerchio(100,100, 10, new CerchioRosso());
        Figura cerchioVerde = new Cerchio(200,200, 20, new CerchioVerde());

        cerchioRosso.disegna();
        cerchioVerde.disegna();
    }
}

Passo 6: Output

[CERCHIOROSSO]: Cerchio disegnato! 
[CERCHIOROSSO]: COLORE: ROSSO, RAGGIO: 10, X: 100, Y:100]
[CERCHIOVERDE]: Cerchio disegnato! 
[CERCHIOVERDE]: COLORE: VERDE, RAGGIO: 20, X: 200, Y:200]

 

LINK UTILI