桥接模式(Bridge Pattern)是一种结构型设计模式,它的主要目的是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过引入抽象层和实现层的组合来解耦,允许在运行时动态地改变或扩展对象的行为。
// 实现部分接口
public interface DrawingAPI {
void drawCircle(double x, double y, double radius);
}
// 具体实现部分1:BasicDrawingAPI
public class BasicDrawingAPI implements DrawingAPI {
@Override
public void drawCircle(double x, double y, double radius) {
System.out.println("Using BasicDrawingAPI to draw a circle at (" + x + ", " + y + ") with radius " + radius);
}
}
// 具体实现部分2:AdvancedDrawingAPI
public class AdvancedDrawingAPI implements DrawingAPI {
@Override
public void drawCircle(double x, double y, double radius) {
System.out.println("Using AdvancedDrawingAPI to draw a circle at (" + x + ", " + y + ") with radius " + radius);
}
}
// 抽象部分
public abstract class Shape {
protected DrawingAPI drawingAPI;
public Shape(DrawingAPI drawingAPI) {
this.drawingAPI = drawingAPI;
}
public abstract void draw();
// 其他抽象或通用方法...
}
// 扩展抽象部分:CircleShape
public class CircleShape extends Shape {
private double x, y, radius;
public CircleShape(DrawingAPI drawingAPI, double x, double y, double radius) {
super(drawingAPI);
this.x = x;
this.y = y;
this.radius = radius;
}
@Override
public void draw() {
drawingAPI.drawCircle(x, y, radius);
}
}
// 使用示例
public class BridgePatternDemo {
public static void main(String[] args) {
Shape basicCircle = new CircleShape(new BasicDrawingAPI(), 100, 50, 40);
basicCircle.draw(); // 输出: Using BasicDrawingAPI to draw a circle...
Shape advancedCircle = new CircleShape(new AdvancedDrawingAPI(), 100, 50, 40);
advancedCircle.draw(); // 输出: Using AdvancedDrawingAPI to draw a circle...
}
}
想象你正在设计一款画图软件,该软件支持不同类型的图形(如圆形、矩形等)和不同的渲染引擎(如简单的线条渲染、3D渲染等)。如果直接把渲染方式硬编码到图形类里,那么每次增加新的渲染方式就得修改所有图形类;反之,若将渲染方式作为可替换的组件,就可以灵活地选择不同的渲染方式绘制任何图形,这就像是给每个图形配备了一座“桥”,这座“桥”可以根据需求连接不同的渲染引擎。