桥接模式(Bridge Pattern)

发布于:2025-06-14 ⋅ 阅读:(22) ⋅ 点赞:(0)

桥接模式(Bridge Pattern)是一种结构型设计模式,它将抽象部分与它的实现部分分离,使它们都可以独立地变化。通过这种方式,桥接模式能够有效地减少类之间的耦合度,并提高代码的可扩展性和灵活性。

体现的设计原则

  1. 单一职责原则:将抽象和实现分离,使得每个类只负责一个功能。
  2. 开闭原则:可以在不修改现有代码的情况下,通过添加新的实现类或抽象类来扩展系统功能。
  3. 组合优于继承:通过对象组合而不是类继承,避免了类爆炸问题。

示例场景

假设在一个绘图系统中,有不同形状(圆形、矩形、三角形)和不同颜色(红色、蓝色、绿色)的图形。如果不使用桥接模式,可能需要为每种形状和颜色的组合创建一个类,导致类的数量急剧增加。而使用桥接模式,可以将形状和颜色分别抽象出来,形状类依赖颜色接口,不同的形状和颜色实现类可以自由组合。

Java 代码示例

// 颜色接口
interface Color {
    void applyColor();
}

// 具体颜色实现类 - 红色
class RedColor implements Color {
    @Override
    public void applyColor() {
        System.out.println("Applying red color");
    }
}

// 具体颜色实现类 - 蓝色
class BlueColor implements Color {
    @Override
    public void applyColor() {
        System.out.println("Applying blue color");
    }
}

// 形状抽象类
abstract class Shape {
    protected Color color;

    public Shape(Color color) {
        this.color = color;
    }

    abstract void draw();
}

// 具体形状实现类 - 圆形
class Circle extends Shape {
    public Circle(Color color) {
        super(color);
    }

    @Override
    void draw() {
        System.out.print("Drawing circle ");
        color.applyColor();
    }
}

// 具体形状实现类 - 矩形
class Rectangle extends Shape {
    public Rectangle(Color color) {
        super(color);
    }

    @Override
    void draw() {
        System.out.print("Drawing rectangle ");
        color.applyColor();
    }
}

// 客户端代码
public class BridgePatternDemo {
    public static void main(String[] args) {
        // 创建红色圆形
        Shape redCircle = new Circle(new RedColor());
        redCircle.draw();

        // 创建蓝色矩形
        Shape blueRectangle = new Rectangle(new BlueColor());
        blueRectangle.draw();
    }
}

在这个例子中:

  • Color 接口定义了颜色的行为,具体颜色类(如 RedColor, BlueColor)实现了这个接口。
  • Shape 是抽象类,持有一个 Color 对象的引用,具体形状类(如 Circle, Rectangle)继承自 Shape 并实现 draw 方法。
  • 在客户端代码中,可以通过组合不同的形状和颜色来绘制图形,而无需为每种形状和颜色的组合创建单独的类。

这样,形状和颜色可以独立扩展,大大减少了类的数量和系统的复杂性。