Sobes.tech
Junior — Middle

Защо в патърна мост се разделят абстракцията и конкретната реализация?

sobes.tech AI

Отговор от AI

В шаблона "Мост" (Bridge) разделянето на абстракцията и конкретната реализация позволява да ги променяте независимо една от друга. Това се постига, защото абстракцията съдържа препратка към интерфейса за реализация, а не към конкретен клас.

Причини за разделяне:

  • Гъвкавост: Може да променяте реализацията без да променяте абстракцията и обратното.
  • Разширяемост: Лесно е да добавяте нови реализации и нови абстракции без множество подкласове.
  • Изолация на промените: Промените в реализацията не влияят на клиентския код, използващ абстракцията.

Например, ако имате абстракция "Фигура" и реализации "Рисуване на екрана" и "Рисуване във файл", можете да променяте начина на рисуване, без да променяте логиката на фигурата.

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.кръг в " + x + "," + y + " радиус " + 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);
    }
}

По този начин, абстракцията "Circle" не зависи от конкретна реализация на "DrawingAPI", което улеснява поддръжката и разширяването.