设计模式之桥接模式

发布于:2025-06-30 ⋅ 阅读:(20) ⋅ 点赞:(0)

定义

       桥接模式通过‌组合关系替代继承关系‌,将抽象层(功能定义)与实现层(具体操作)解耦,允许两者独立扩展。避免因多维度继承导致的类爆炸问题,提高系统灵活性和可维护性。

结构

在这里插入图片描述

适用场景

      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();  // 输出:"绘制圆形,填充:红色"
    }

}

网站公告

今日签到

点亮在社区的每一天
去签到