理解桥梁模式,其实就是理解代码抽象和解耦。
我们首先需要一个桥梁,它是一个接口,定义提供的接口方法。
| 12
 3
 
 | public interface DrawAPI {public void draw(int radius, int x, int y);
 }
 
 | 
然后是一系列实现类:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 
 | public class RedPen implements DrawAPI {@Override
 public void draw(int radius, int x, int y) {
 System.out.println("用红色笔画图,radius:" + radius + ", x:" + x + ", y:" + y);
 }
 }
 
 public class GreenPen implements DrawAPI {
 @Override
 public void draw(int radius, int x, int y) {
 System.out.println("用绿色笔画图,radius:" + radius + ", x:" + x + ", y:" + y);
 }
 }
 
 public class BluePen implements DrawAPI {
 @Override
 public void draw(int radius, int x, int y) {
 System.out.println("用蓝色笔画图,radius:" + radius + ", x:" + x + ", y:" + y);
 }
 }
 
 | 
定义一个抽象类,此类的实现类都需要使用 DrawAPI:
| 12
 3
 4
 5
 6
 7
 
 | public abstract class Shape {protected DrawAPI drawAPI;
 protected Shape(DrawAPI drawAPI) {
 this.drawAPI = drawAPI;
 }
 public abstract void draw();
 }
 
 | 
定义抽象类的子类:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 
 | public class Circle extends Shape {
 private int radius;
 public Circle(int radius, DrawAPI drawAPI) {
 super(drawAPI);
 this.radius = radius;
 }
 public void draw() {
 drawAPI.draw(radius, 0, 0);
 }
 }
 
 
 public class Rectangle extends Shape {
 private int x;
 private int y;
 public Rectangle(int x, int y, DrawAPI drawAPI) {
 super(drawAPI);
 this.x = x;
 this.y = y;
 }
 public void draw() {
 drawAPI.draw(0, x, y);
 }
 }
 
 | 
最后,我们来看客户端演示:
| 12
 3
 4
 5
 6
 7
 8
 
 | public class Main {public static void main(String[] args) {
 Shape greenCircle = new Circle(10, new GreenPen());
 Shape redRectangle = new Rectangle(4, 8, new RedPen());
 greenCircle.draw();
 redRectangle.draw();
 }
 }
 
 | 
参考