设计模式)
文章目录一.什么是桥接设计模式二.桥接模式的特点三.桥接模式的结构四.桥接模式的优缺点五. 桥接模式的 C 实现六.桥接模式的 Java 实现七.代码解析八.总结一.什么是桥接设计模式桥接模式Bridge Pattern 是一种结构型设计模式用于将抽象部分与实现部分分离使它们可以独立地变化。通过桥接模式抽象层和实现层之间的耦合度被降低从而使系统具有更好的灵活性和可扩展性。二.桥接模式的特点抽象与实现分离抽象层定义抽象功能而具体实现层定义具体行为通过一个桥接口或引用将两者连接起来。独立变化抽象和实现可以独立扩展不会互相影响。动态组合运行时可以灵活选择和替换实现。三.桥接模式的结构Abstraction抽象类定义高层抽象接口依赖实现类对象。RefinedAbstraction扩展抽象类扩展抽象类提供更高级的操作。Implementor实现类接口定义实现层的通用接口。ConcreteImplementor具体实现类实现 Implementor 接口的具体功能。四.桥接模式的优缺点优点分离抽象与实现两者可以独立扩展互不干扰。使用组合代替继承解决多维度变化场景下的类爆炸问题。运行时可以动态替换实现层对象提高系统灵活性。符合开闭原则新增抽象或者新增实现无需修改对方代码。缺点增加系统的理解难度需要识别出系统中两个独立变化的维度。会增加额外的类数量提升系统复杂度。五. 桥接模式的 C 实现示例场景图形圆形、矩形为抽象维度颜色红色、蓝色为实现维度。图形持有颜色的指针作为“桥”图形和颜色可以各自新增不需要写大量子类。#includeiostreamusingnamespacestd;// 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*rednewRed();Color*bluenewBlue();Shape*s1newCircle(red);Shape*s2newCircle(blue);Shape*s3newRectangle(red);Shape*s4newRectangle(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.colorc;}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){ColorrednewRed();ColorbluenewBlue();Shapes1newCircle(red);Shapes2newCircle(blue);Shapes3newRectangle(red);Shapes4newRectangle(blue);s1.draw();s2.draw();s3.draw();s4.draw();}}七.代码解析四个角色一一对应桥接模式标准结构ImplementorColor定义实现层接口代表其中一个变化维度ConcreteImplementorRed、Blue实现接口是该维度下的具体实现AbstractionShape高层抽象组合持有 Implementor 的指针/引用这就是桥把两个维度连接起来RefinedAbstractionCircle、Rectangle扩展抽象类完成具体业务。组合替代继承如果用继承实现图形颜色每新增一个图形或者颜色子类数量会爆炸桥接使用组合新增图形只改抽象层新增颜色只改实现层互不影响。动态组合客户端运行时可以自由把任意Shape和任意Color组合不需要编译期写死。扩展演示新增颜色「Yellow」只需要实现Color接口新增图形「Triangle」只需要继承Shape原有代码完全不用改动满足开闭原则。八.总结桥接模式核心分离抽象维度与实现维度使用组合代替继承让两个维度独立变化。适用场景系统存在两个或者多个独立变化的维度不想使用多层继承避免类爆炸需要运行时动态切换实现部分。软考考点记忆归属结构型设计模式别名柄体(Handle‑Body)模式。四大角色抽象类Abstraction、扩充抽象RefinedAbstraction、实现接口Implementor、具体实现ConcreteImplementor。关键点组合代替继承解决多维度类爆炸。易混淆区分适配器是用来兼容已有接口桥接是从设计之初就分离两个变化维度。对比提示适配器重在“转换接口”桥接重在“分离维度持续扩展”。