Sobes.tech
Junior — Middle

Prečo v vzorec mosta oddelíme abstrakciu od konkrétnej implementácie?

sobes.tech AI

Odpoveď od AI

V vzorec "Most" (Bridge) ločitev abstrakcije od konkretne implementacije omogoča njuno neodvisno spreminjanje. To se doseže, ker abstrakcija vsebuje referenco na vmesnik implementacije, ne na konkretno razred.

Razlogi za ločevanje:

  • Prilagodljivost: Implementacijo lahko spremenite brez spremembe abstrakcije in obratno.
  • Razširljivost: Enostavno je dodajati nove implementacije in nove abstrakcije brez mnogih podrazredov.
  • Izolacija sprememb: Spremembe v implementaciji ne vplivajo na kodo odjemalca, ki uporablja abstrakcijo.

Na primer, če imate abstrakcijo "Oblika" in implementacije "Risanje na zaslon" in "Risanje v datoteko", lahko spremenite način risanja, ne da bi spremenili logiko oblike.

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.krog na " + x + "," + y + " polmer " + 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);
    }
}

Tako abstrakcija "Circle" ni odvisna od konkretne implementacije "DrawingAPI", kar olajša vzdrževanje in razširitev.