☰
23种设计模式‑桥接(Bridge)设计模式
2026/9/30 9:00:58 网站建设 项目流程
文章目录
  • 一.什么是桥接设计模式?
  • 二.桥接模式的特点
  • 三.桥接模式的结构
  • 四.桥接模式的优缺点
  • 五. 桥接模式的 C++ 实现
  • 六.桥接模式的 Java 实现
  • 七.代码解析
  • 八.总结

一.什么是桥接设计模式?

桥接模式(Bridge Pattern) 是一种结构型设计模式,用于将抽象部分与实现部分分离,使它们可以独立地变化。通过桥接模式,抽象层和实现层之间的耦合度被降低,从而使系统具有更好的灵活性和可扩展性。

二.桥接模式的特点

  • 抽象与实现分离:抽象层定义抽象功能,而具体实现层定义具体行为,通过一个桥(接口或引用)将两者连接起来。
  • 独立变化:抽象和实现可以独立扩展,不会互相影响。
  • 动态组合:运行时可以灵活选择和替换实现。

三.桥接模式的结构

  • Abstraction(抽象类):定义高层抽象接口,依赖实现类对象。
  • RefinedAbstraction(扩展抽象类):扩展抽象类,提供更高级的操作。
  • Implementor(实现类接口):定义实现层的通用接口。
  • ConcreteImplementor(具体实现类):实现 Implementor 接口的具体功能。

四.桥接模式的优缺点

优点

  1. 分离抽象与实现,两者可以独立扩展,互不干扰。
  2. 使用组合代替继承,解决多维度变化场景下的类爆炸问题。
  3. 运行时可以动态替换实现层对象,提高系统灵活性。
  4. 符合开闭原则,新增抽象或者新增实现,无需修改对方代码。

缺点

  1. 增加系统的理解难度,需要识别出系统中两个独立变化的维度。
  2. 会增加额外的类数量,提升系统复杂度。

五. 桥接模式的 C++ 实现

示例场景:图形(圆形、矩形)为抽象维度;颜色(红色、蓝色)为实现维度。图形持有颜色的指针作为“桥”,图形和颜色可以各自新增,不需要写大量子类。

#include<iostream>usingnamespacestd;// Implementor:实现类接口(颜色)classColor{public:virtual~Color()=default;virtualvoidshowColor()=0;};// ConcreteImplementor 具体实现类:红色classRed:publicColor{public:voidshowColor()override{cout<<"红色";}};// ConcreteImplementor 具体实现类:蓝色classBlue:publicColor{public:voidshowColor()override{cout<<"蓝色";}};// Abstraction:抽象类(图形),持有实现层对象指针 —— 桥接核心classShape{protected:Color*color;public:Shape(Color*c):color(c){}virtual~Shape()=default;virtualvoiddraw()=0;};// RefinedAbstraction:扩展抽象类 - 圆形classCircle:publicShape{public:Circle(Color*c):Shape(c){}voiddraw()override{cout<<"绘制";color->showColor();cout<<"的圆形"<<endl;}};// RefinedAbstraction:扩展抽象类 - 矩形classRectangle:publicShape{public:Rectangle(Color*c):Shape(c){}voiddraw()override{cout<<"绘制";color->showColor();cout<<"的矩形"<<endl;}};// 客户端代码intmain(){Color*red=newRed();Color*blue=newBlue();Shape*s1=newCircle(red);Shape*s2=newCircle(blue);Shape*s3=newRectangle(red);Shape*s4=newRectangle(blue);s1->draw();s2->draw();s3->draw();s4->draw();deletes1;deletes2;deletes3;deletes4;deletered;deleteblue;return0;}

C++运行输出

绘制红色的圆形 绘制蓝色的圆形 绘制红色的矩形 绘制蓝色的矩形

六.桥接模式的 Java 实现

// Implementor 实现接口:颜色interfaceColor{voidshowColor();}// 具体实现:红色classRedimplementsColor{@OverridepublicvoidshowColor(){System.out.print("红色");}}// 具体实现:蓝色classBlueimplementsColor{@OverridepublicvoidshowColor(){System.out.print("蓝色");}}// Abstraction 抽象类:图形abstractclassShape{protectedColorcolor;publicShape(Colorc){this.color=c;}publicabstractvoiddraw();}// RefinedAbstraction 扩展抽象:圆形classCircleextendsShape{publicCircle(Colorc){super(c);}@Overridepublicvoiddraw(){System.out.print("绘制");color.showColor();System.out.println("的圆形");}}// RefinedAbstraction 扩展抽象:矩形classRectangleextendsShape{publicRectangle(Colorc){super(c);}@Overridepublicvoiddraw(){System.out.print("绘制");color.showColor();System.out.println("的矩形");}}// 客户端publicclassBridgeDemo{publicstaticvoidmain(String[]args){Colorred=newRed();Colorblue=newBlue();Shapes1=newCircle(red);Shapes2=newCircle(blue);Shapes3=newRectangle(red);Shapes4=newRectangle(blue);s1.draw();s2.draw();s3.draw();s4.draw();}}

七.代码解析

  1. 四个角色一一对应桥接模式标准结构
    • Implementor(Color):定义实现层接口,代表其中一个变化维度;
    • ConcreteImplementor(Red、Blue):实现接口,是该维度下的具体实现;
    • Abstraction(Shape):高层抽象,组合持有 Implementor 的指针/引用,这就是桥,把两个维度连接起来;
    • RefinedAbstraction(Circle、Rectangle):扩展抽象类,完成具体业务。
  2. 组合替代继承
    如果用继承实现图形+颜色,每新增一个图形或者颜色,子类数量会爆炸;桥接使用组合,新增图形只改抽象层,新增颜色只改实现层,互不影响。
  3. 动态组合
    客户端运行时可以自由把任意Shape和任意Color组合,不需要编译期写死。
  4. 扩展演示
    新增颜色「Yellow」只需要实现Color接口;新增图形「Triangle」只需要继承Shape,原有代码完全不用改动,满足开闭原则。

八.总结

  1. 桥接模式核心:分离抽象维度与实现维度,使用组合代替继承,让两个维度独立变化。
  2. 适用场景:
    • 系统存在两个或者多个独立变化的维度;
    • 不想使用多层继承,避免类爆炸;
    • 需要运行时动态切换实现部分。
  3. 软考考点记忆:
    • 归属:结构型设计模式;别名:柄体(Handle‑Body)模式。
    • 四大角色:抽象类Abstraction、扩充抽象RefinedAbstraction、实现接口Implementor、具体实现ConcreteImplementor。
    • 关键点:组合代替继承,解决多维度类爆炸。
    • 易混淆区分:适配器是用来兼容已有接口;桥接是从设计之初就分离两个变化维度。

对比提示:适配器重在“转换接口”;桥接重在“分离维度,持续扩展”。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询