Учебники

Шаблоны проектирования — шаблон моста

Мост используется, когда нам нужно отделить абстракцию от его реализации, чтобы они могли различаться независимо друг от друга. Этот тип шаблона проектирования подпадает под структурный шаблон, поскольку этот шаблон разделяет класс реализации и абстрактный класс, предоставляя мостовую структуру между ними.

Этот шаблон включает интерфейс, который действует как мост, который делает функциональность конкретных классов независимой от классов реализации интерфейса. Оба типа классов могут быть изменены структурно, не влияя друг на друга.

Мы демонстрируем использование шаблона Bridge с помощью следующего примера, в котором круг может быть нарисован разными цветами, используя один и тот же метод абстрактного класса, но разные классы реализации моста.

Реализация

У нас есть интерфейс DrawAPI, который выполняет функции моста и конкретные классы RedCircle , GreenCircle, реализующий интерфейс DrawAPI . Shape является абстрактным классом и будет использовать объект DrawAPI . BridgePatternDemo , наш демонстрационный класс будет использовать класс Shape для рисования разноцветного круга.

UML Диаграмма Мостового Узора

Шаг 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

Проверьте вывод.