Назад к вопросам
СБЕР
Junior — Middle
53
Почему в паттерне мост разделяют абстракцию и конкретную реализацию?
Компании, где спрашивали
Ответ от нейросети
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, что облегчает поддержку и расширение.