定义
桥接模式通过组合关系替代继承关系,将抽象层(功能定义)与实现层(具体操作)解耦,允许两者独立扩展。避免因多维度继承导致的类爆炸问题,提高系统灵活性和可维护性。
结构
适用场景
1)多维独立变化的系统
当类存在多个独立变化的维度(如形状+颜色、车型+道路),且每个维度均需扩展时。例如:图形绘制系统中,形状(圆形/矩形)和颜色(红/蓝)可独立扩展,无需为每种组合创建子类。
2)抽象与实现需独立演化
当抽象部分和实现部分需独立修改或替换,且不影响客户端代码。
注:桥接模式要求能够正确识别出系统中的独立变化的维度。
使用示例
以下伪代码展示形状与颜色的桥接实现。
实现化角色定义
/**
* 定义桥接模式中实现化角色接口
*/
public interface Color {
String fill(); // 填充颜色
}
/**
* 具体实现化角色A
*/
public class Red implements Color {
public String fill() {
return "红色";
}
}
/**
* 具体实现化角色B
*/
public class Blue implements Color {
public String fill() {
return "蓝色";
}
}
抽象化角色定义
/**
* 抽象化角色:形状基类
*/
public abstract class Shape {
protected Color color; // 组合颜色对象
Shape(Color color) {
this.color = color;
}
abstract void draw();
}
/**
* 扩展抽象化角色A
*/
public class Circle extends Shape {
public Circle(Color color) {
super(color);
}
public void draw() {
System.out.println("绘制圆形,填充:" + color.fill());
}
}
/**
* 扩展抽象化角色B
*/
public class Rectangle extends Shape {
Rectangle(Color color) {
super(color);
}
void draw() {
System.out.println("绘制矩形,填充:" + color.fill());
}
}
测试
public class Client {
public static void main(String[] args) {
// 客户端调用
Shape redCircle = new Circle(new Red());
redCircle.draw(); // 输出:"绘制圆形,填充:红色"
}
}