Мост используется, когда нам нужно отделить абстракцию от его реализации, чтобы они могли различаться независимо друг от друга. Этот тип шаблона проектирования подпадает под структурный шаблон, поскольку этот шаблон разделяет класс реализации и абстрактный класс, предоставляя мостовую структуру между ними.
Этот шаблон включает интерфейс, который действует как мост, который делает функциональность конкретных классов независимой от классов реализации интерфейса. Оба типа классов могут быть изменены структурно, не влияя друг на друга.
Мы демонстрируем использование шаблона Bridge с помощью следующего примера, в котором круг может быть нарисован разными цветами, используя один и тот же метод абстрактного класса, но разные классы реализации моста.
Реализация
У нас есть интерфейс DrawAPI, который выполняет функции моста и конкретные классы RedCircle , GreenCircle, реализующий интерфейс DrawAPI . Shape является абстрактным классом и будет использовать объект DrawAPI . BridgePatternDemo , наш демонстрационный класс будет использовать класс Shape для рисования разноцветного круга.
Шаг 1
Создать интерфейс реализации моста.
DrawAPI.java
public interface DrawAPI { public void drawCircle(int radius, int x, int y); }
Шаг 2
Создайте классы реализации конкретного моста, реализующие интерфейс DrawAPI .
RedCircle.java
public class RedCircle implements DrawAPI { @Override public void drawCircle(int radius, int x, int y) { System.out.println("Drawing Circle[ color: red, radius: " + radius + ", x: " + x + ", " + y + "]"); } }
GreenCircle.java
public class GreenCircle implements DrawAPI { @Override public void drawCircle(int radius, int x, int y) { System.out.println("Drawing Circle[ color: green, radius: " + radius + ", x: " + x + ", " + y + "]"); } }
Шаг 3
Создайте абстрактный класс Shape, используя интерфейс DrawAPI .
Shape.java
public abstract class Shape { protected DrawAPI drawAPI; protected Shape(DrawAPI drawAPI){ this.drawAPI = drawAPI; } public abstract void draw(); }
Шаг 4
Создайте конкретный класс, реализующий интерфейс Shape .
Circle.java
public class Circle extends Shape { private int x, y, radius; public Circle(int x, int y, int radius, DrawAPI drawAPI) { super(drawAPI); this.x = x; this.y = y; this.radius = radius; } public void draw() { drawAPI.drawCircle(radius,x,y); } }
Шаг 5
Используйте классы Shape и DrawAPI для рисования разноцветных кругов.
BridgePatternDemo.java
public class BridgePatternDemo { public static void main(String[] args) { Shape redCircle = new Circle(100,100, 10, new RedCircle()); Shape greenCircle = new Circle(100,100, 10, new GreenCircle()); redCircle.draw(); greenCircle.draw(); } }
Шаг 6
Проверьте вывод.