Sobes.tech
Назад к вопросам
Junior — Middle
102

Можете объяснить концепцию паттерна Bridge в программировании и его основные преимущества?

Компании, где спрашивали
Бюро 1440Бюро 1440

Ответ от нейросети

sobes.tech AI

Паттерн Bridge (Мост) используется для разделения абстракции и её реализации так, чтобы они могли изменяться независимо друг от друга. Это достигается созданием двух иерархий классов: одна отвечает за абстракцию, другая — за реализацию.

Основные преимущества:

  • Уменьшение связанности между абстракцией и реализацией.
  • Возможность изменять и расширять обе части независимо.
  • Улучшение масштабируемости и гибкости кода.

Пример: представим графический редактор, где есть разные фигуры (круг, квадрат) и разные способы их отрисовки (OpenGL, DirectX). Паттерн 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 DrawingAPI2 implements DrawingAPI {
    public void drawCircle(double x, double y, double radius) {
        System.out.println("API2.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 circle1 = new Circle(1, 2, 3, new DrawingAPI1());
circle1.draw();
Circle circle2 = new Circle(5, 7, 11, new DrawingAPI2());
circle2.draw();