Bridge模式,又称为桥接模式,是一种结构型设计模式,它的核心思想是将抽象部分与它的实现部分分离,使它们都可以独立地变化。Bridge模式通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦,使得抽象和实现可以沿着各自的维度来变化。
类图:
Bridge模式通常包含以下几个角色:
以JDBC为例,JDBC为所有的关系型数据库提供一个通用的界面,通过提供一个抽象层(如Connection、Statement等接口),使得应用程序可以独立于具体的数据库实现。而具体的数据库实现(如MySQL、Oracle等)则通过各自的数据库驱动来提供。这样,当应用程序需要在不同的数据库之间切换时,只需要更换数据库驱动即可,而无需修改应用程序的代码。这就是Bridge模式在JDBC中的一个典型应用。
以下是一个简单的Java示例,展示了如何实现桥接模式:
// 实现化角色接口 interface DrawAPI { void drawCircle(int radius, int x, int y); } // 具体实现化角色 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 + "]"); } } 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 + "]"); } } // 抽象化角色 abstract class Shape { protected DrawAPI drawAPI; // 构造函数,传入实现化角色 protected Shape(DrawAPI drawAPI) { this.drawAPI = drawAPI; } // 使用实现化角色中的方法 public abstract void draw(); } // 修正抽象化角色 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; } // 调用实现化角色的方法 @Override public void draw() { drawAPI.drawCircle(radius, x, y); } } // 测试类 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(); } }
在这个例子中,DrawAPI是实现化角色的接口,它定义了一个drawCircle方法。RedCircle和GreenCircle是具体实现化角色,它们分别实现了drawCircle方法,以绘制不同颜色的圆。
Shape是抽象化角色的抽象类,它持有一个DrawAPI类型的引用,并定义了一个draw方法的抽象实现。Circle是修正抽象化角色,它继承了Shape类,并实现了draw方法,该方法通过调用drawAPI引用的drawCircle方法来绘制圆。
最后,在BridgePatternDemo类中,我们创建了红色和绿色的圆,并通过调用它们的draw方法来绘制它们。由于draw方法内部调用了drawAPI引用的方法,因此我们可以通过改变drawAPI的实例来改变圆的颜色,而无需修改Circle类的代码。这就是桥接模式带来的灵活性和可扩展性。
如果有收获,记得点赞收藏。