Sobes.tech
Back to questions
Junior — Middle
52

Почему в паттерне мост разделяют абстракцию и конкретную реализацию?

Companies where asked
СБЕРСБЕР

Answer from AI

sobes.tech 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.circle at " + x + "," + y + " radius " + 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, что облегчает поддержку и расширение.