Назад к вопросам
СБЕР
Middle — Middle+
68
Объясните концепцию и применение шаблона проектирования 'мост' в разработке программного обеспечения.
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
Шаблон проектирования «Мост» (Bridge) используется для разделения абстракции и её реализации так, чтобы они могли изменяться независимо друг от друга.
Идея в том, что у нас есть две иерархии классов: одна отвечает за абстракцию (интерфейс), другая — за реализацию. Абстракция содержит ссылку на объект реализации и делегирует ему работу. Это позволяет менять реализацию без изменения абстракции и наоборот.
Применение:
- Когда нужно избежать жесткой связи между абстракцией и реализацией.
- Когда обе части могут развиваться независимо.
- Для поддержки нескольких вариантов реализации, которые могут комбинироваться с разными абстракциями.
Пример на Java:
// Реализация
interface Renderer {
void renderCircle(float x, float y, float radius);
}
class VectorRenderer implements Renderer {
public void renderCircle(float x, float y, float radius) {
System.out.println("Drawing a circle as lines at (" + x + "," + y + ") with radius " + radius);
}
}
class RasterRenderer implements Renderer {
public void renderCircle(float x, float y, float radius) {
System.out.println("Drawing pixels for circle at (" + x + "," + y + ") with radius " + radius);
}
}
// Абстракция
abstract class Shape {
protected Renderer renderer;
public Shape(Renderer renderer) {
this.renderer = renderer;
}
public abstract void draw();
}
class Circle extends Shape {
private float x, y, radius;
public Circle(Renderer renderer, float x, float y, float radius) {
super(renderer);
this.x = x; this.y = y; this.radius = radius;
}
public void draw() {
renderer.renderCircle(x, y, radius);
}
}
// Использование
Renderer renderer = new VectorRenderer();
Shape circle = new Circle(renderer, 5, 10, 7);
circle.draw();
Так можно менять способ отрисовки (VectorRenderer или RasterRenderer), не меняя класс Circle.