魔术桌
  • 更新日志
  • 新闻资讯
  • 数据资产
  • 网站导航
  • 订阅推荐
  • 商品推广
  • 日记
  • 摘录
  • 论文
  • 方案
  • 技术
  • 风格
  • 视觉
  • 原材料
  • 加工工艺
  • 元器件
  • 产品设备
  • 设计模式
  • 数据结构
  • 算法设计
  • 软件架构
  • 程序语言
  • 代码类库
  • 操作系统
  • 软件包
  • 健康
  • 环境
  • 社会
  • 道德
  • 法律
  • 经济
  • 政策
  • 更新日志
  • 新闻资讯
  • 数据资产
  • 网站导航
  • 订阅推荐
  • 商品推广
  • 日记
  • 摘录
  • 论文
  • 方案
  • 技术
  • 风格
  • 视觉
  • 原材料
  • 加工工艺
  • 元器件
  • 产品设备
  • 设计模式
  • 数据结构
  • 算法设计
  • 软件架构
  • 程序语言
  • 代码类库
  • 操作系统
  • 软件包
  • 健康
  • 环境
  • 社会
  • 道德
  • 法律
  • 经济
  • 政策
  • DesignPattern - 桥接模式

文章摘要: 桥接模式使用总结。

简介

简要说明

  • 桥接模式(Bridge Pattern)是一种结构型设计模式。
  • 通过将抽象部分(Abstraction)与实现部分(Implementor)分离,使它们可以独立地变化。
  • 这种模式涉及到一个作为桥接的接口,这个接口使得抽象部分和实现部分可以相互独立地扩展。

主要功能

  • 分离抽象和实现,使它们可以独立变化,互不影响。
  • 提高了系统的可扩展性,因为抽象和实现都可以独立扩展。
  • 避免了继承层次的快速膨胀。

注意事项

  • 桥接模式可能会增加系统的复杂度,因为它引入了额外的抽象层和实现层。
  • 应该在抽象和实现确实需要独立变化时使用桥接模式,否则可能会造成不必要的复杂。
  • 在设计时需要考虑如何将抽象部分和实现部分分离开来。

适用场景

  • 当一个类存在两个或多个独立变化的维度时,且这两个维度都需要进行扩展。
  • 当不希望使用继承导致类爆炸时。
  • 当一个类需要其子类的行为,但这些子类的实现可能变化时。

Java 8

案例

// 实现部分接口
interface DrawingAPI {
    void drawCircle(double x, double y, double radius);
}

// 具体实现部分
class DrawingAPI1 implements DrawingAPI {
    public void drawCircle(double x, double y, double radius) {
        System.out.printf("API1.circle at %f:%f radius %f\n", x, y, radius);
    }
}

class DrawingAPI2 implements DrawingAPI {
    public void drawCircle(double x, double y, double radius) {
        System.out.printf("API2.circle at %f:%f radius %f\n", x, y, radius);
    }
}

// 抽象部分
abstract class Shape {
    protected DrawingAPI drawingAPI;

    protected Shape(DrawingAPI drawingAPI) {
        this.drawingAPI = drawingAPI;
    }

    public abstract void draw(); // low-level i.e. Implementation specific
    public abstract void resizeByPercentage(double pct); // high-level i.e. Abstraction specific
}

// 扩展抽象部分
class Circle extends Shape {
    private double x, y, radius;

    public Circle(double x, double y, double radius, DrawingAPI drawingAPI) {
        super(drawingAPI);
        this.x = x;
        this.y = y;
        this.radius = radius;
    }

    // low-level i.e. Implementation specific
    public void draw() {
        drawingAPI.drawCircle(x, y, radius);
    }

    // high-level i.e. Abstraction specific
    public void resizeByPercentage(double pct) {
        radius *= pct;
    }
}

// 客户端代码
public class BridgePatternDemo {
    public static void main(String[] args) {
        Shape redCircle = new Circle(1, 2, 3, new DrawingAPI1());
        Shape greenCircle = new Circle(5, 7, 8, new DrawingAPI2());

        redCircle.draw();
        greenCircle.draw();

        redCircle.resizeByPercentage(2.5);
        greenCircle.resizeByPercentage(2.5);

        redCircle.draw();
        greenCircle.draw();
    }
}

注释

  • 在这个例子中,DrawingAPI 是实现部分的接口,它定义了绘制图形的方法。DrawingAPI1 和 DrawingAPI2 是具体的实现类。
  • Shape 是抽象部分的基类,它包含了一个指向实现部分接口的引用。
  • Circle 是扩展抽象部分的具体类,它实现了绘制和调整大小的功能。
  • 客户端代码可以创建不同实现和抽象组合的实例,从而实现抽象和实现的独立变化。
更新时间: 2025/10/3 17:56