Паттерны проектирования - Выкройка моста

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

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

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

Реализация

У нас есть интерфейс 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

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

Drawing Circle[ color: red, radius: 10, x: 100, 100]
Drawing Circle[  color: green, radius: 10, x: 100, 100]