Design Pattern 简明教程

Design Patterns - Bridge Pattern

Bridge 在我们需要将抽象与其实现分离时使用,以便两者可以独立变化。这种设计模式属于结构模式,因为此模式通过在实现类和抽象类之间提供桥接结构来将两者分离。

Bridge is used when we need to decouple an abstraction from its implementation so that the two can vary independently. This type of design pattern comes under structural pattern as this pattern decouples implementation class and abstract class by providing a bridge structure between them.

此模式涉及充当桥接器的接口,该接口使具体类的功能独立于界面实现者类。两种类型的类在不影响彼此的情况下可以在结构上进行更改。

This pattern involves an interface which acts as a bridge which makes the functionality of concrete classes independent from interface implementer classes. Both types of classes can be altered structurally without affecting each other.

我们通过以下示例演示如何使用桥接模式,其中可以使用相同的抽象类方法和不同的桥接实现者类以不同的颜色绘制圆。

We are demonstrating use of Bridge pattern via following example in which a circle can be drawn in different colors using same abstract class method but different bridge implementer classes.

Implementation

我们有一个作为桥接实现者的 DrawAPI 接口以及实现 DrawAPI 接口的具体类 RedCircle 和 GreenCircle。Shape 是一个抽象类,将使用 DrawAPI 对象。我们的演示类 BridgePatternDemo 将使用 Shape 类绘制不同颜色的圆。

We have a DrawAPI interface which is acting as a bridge implementer and concrete classes RedCircle, GreenCircle implementing the DrawAPI interface. Shape is an abstract class and will use object of DrawAPI. BridgePatternDemo, our demo class will use Shape class to draw different colored circle.

bridge pattern uml diagram

Step 1

创建桥接实现器接口。

Create bridge implementer interface.

DrawAPI.java

public interface DrawAPI {
   public void drawCircle(int radius, int x, int y);
}

Step 2

创建实现 DrawAPI 接口的具体桥接实现器类。

Create concrete bridge implementer classes implementing the DrawAPI interface.

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 + "]");
   }
}

Step 3

使用 DrawAPI 接口创建抽象类 Shape。

Create an abstract class Shape using the DrawAPI interface.

Shape.java

public abstract class Shape {
   protected DrawAPI drawAPI;

   protected Shape(DrawAPI drawAPI){
      this.drawAPI = drawAPI;
   }
   public abstract void draw();
}

Step 4

使用 Gemini 实现 Shape 接口的具体类。

Create concrete class implementing the Shape interface.

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);
   }
}

Step 5

使用 Shape 和 DrawAPI 类绘制不同颜色的圆。

Use the Shape and DrawAPI classes to draw different colored circles.

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();
   }
}

Step 6

验证输出。

Verify the output.

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