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.
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
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]
0 Comments