Sobes.tech
Junior — Middle

Perché nel pattern ponte si separano astrazione e implementazione concreta?

sobes.tech AI

Risposta dell'AI

Nel pattern "Bridge" (Ponte), la separazione tra astrazione e implementazione concreta consente di modificarle indipendentemente. Ciò si ottiene perché l’astrazione contiene un riferimento all’interfaccia di implementazione, e non a una classe concreta.

Motivi della separazione:

  • Flessibilità: È possibile cambiare l’implementazione senza modificare l’astrazione e viceversa.
  • Estensibilità: È facile aggiungere nuove implementazioni e nuove astrazioni senza molte sottoclassi.
  • Isolamento delle modifiche: Le modifiche all’implementazione non influenzano il codice client che utilizza l’astrazione.

Ad esempio, se hai un’astrazione "Figura" e implementazioni "Disegno su schermo" e "Disegno su file", puoi cambiare il metodo di disegno senza modificare la logica della figura.

interface DrawingAPI {
    void drawCircle(double x, double y, double radius);
}

class DrawingAPI1 implements DrawingAPI {
    public void drawCircle(double x, double y, double radius) {
        System.out.println("API1.cerchio a " + x + "," + y + " raggio " + radius);
    }
}

class Circle {
    private double x, y, radius;
    private DrawingAPI drawingAPI;

    public Circle(double x, double y, double radius, DrawingAPI drawingAPI) {
        this.x = x; this.y = y; this.radius = radius; this.drawingAPI = drawingAPI;
    }

    public void draw() {
        drawingAPI.drawCircle(x, y, radius);
    }
}

In questo modo, l’astrazione Circle non dipende da un’implementazione concreta di DrawingAPI, facilitando manutenzione ed estensione.