设计模式 桥接模式

  • 设计模式 - 桥接模式

    桥接模式当我们需要将抽象与其实现分离开来时,可以使用Bridge 桥接模式,以便两者可以独立变化。这种类型的设计模式属于结构模式,因为该模式通过在实现类和抽象类之间提供桥梁结构来使它们分离。这种模式涉及一个充当桥梁的接口,该接口使具体类的功能独立于接口实现者类。两种类型的类都可以在结构上进行更改而不会互相影响。我们通过以下示例演示桥模式的使用,在该示例中,可以使用相同的抽象类方法但使用不同的桥实现程序类以不同的颜色绘制圆。
  • 实例

    我们有一个DrawAPI接口,它充当桥实现者,而具体类RedCircle和GreenCircle实现了DrawAPI接口。Shape是一个抽象类,将使用DrawAPI的对象。BridgePatternDemo,我们的演示类将使用Shape类绘制不同的彩色圆圈。
    dp
    第1步 - 创建网桥实现者接口。DrawAPI.java
    
    public interface DrawAPI {
       public void drawCircle(int radius, int x, int y);
    }
    
    第2步 - 创建实现DrawAPI接口的具体网桥实现程序类。 RedCircle.java , GreenCircle.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 + "]");
       }
    }
    
    
    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步 - 使用DrawAPI接口创建一个抽象类Shape。 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]