设计模式——桥接模式
介绍
将抽象与实现解耦合,使得二者可以独立变化。这中模式涉及到一个作为桥接的接口,使得实体类功能独立于接口实现类,这两种类型的类可被解构化改变而互不影响。
意图
将抽象部分与实现部分分离,使他们可以独立变化。
解决
有多种可能会变化的情况下,使用继承造成类爆炸,扩展不灵活。
优点
- 抽象与实现分离;
- 优秀的扩展;
- 实现细节对客户透明。
缺点
- 增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者对抽象类进行设计与编程。
使用场景
- 一个系统在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的继承联系,通过桥接使得他们在抽象层建立一个关联;
- 对于那些不希望使用继承或因为多层继承导致系统类的个数急剧增加的系统;
- 一个类存在两个对立变化的维度,且两个维度都要进行扩展。
UML
示例
DrawAPI.java
package cn.geoaryblog.design.cretedg.bridge;
public interface DrawAPI {
void drawCircle(int radius, int x, int y);
}
RedCircle.java
package cn.geoaryblog.design.cretedg.bridge;
public class RedCircle implements DrawAPI {
@Override
public void drawCircle(int radius, int x, int y) {
System.out.println("当前是红色的圆,半径是:" + radius + " 坐标:x=" + x + ", y=" + y);
}
}
GreenCircle.java
package cn.geoaryblog.design.cretedg.bridge;
public class GreenCircle implements DrawAPI {
@Override
public void drawCircle(int radius, int x, int y) {
System.out.println("当前是绿色的圆,半径是:" + radius + " 坐标:x=" + x + ", y=" + y);
}
}
Shape.java
package cn.geoaryblog.design.cretedg.bridge;
public abstract class Shape {
protected DrawAPI drawAPI;
protected Shape(DrawAPI drawAPI){
this.drawAPI = drawAPI;
}
public abstract void draw();
}
Cicle.java
package cn.geoaryblog.design.cretedg.bridge;
public class Cicle extends Shape {
private int radius;
private int x;
private int y;
protected Cicle(int radius, int x, int y, DrawAPI drawAPI) {
super(drawAPI);
this.radius = radius;
this.x = x;
this.y = y;
}
@Override
public void draw() {
drawAPI.drawCircle(radius, x, y);
}
}
Client.java
package cn.geoaryblog.design.cretedg.bridge;
public class Client {
public static void main(String[] args) {
Shape redCicle = new Cicle(10, 10, 20, new RedCircle());
Shape greenCicle = new Cicle(10, 0, 20, new GreenCircle());
redCicle.draw();
greenCicle.draw();
}
}
// 输出结果
// 当前是红色的圆,半径是:10 坐标:x=10, y=20
// 当前是绿色的圆,半径是:10 坐标:x=0, y=20
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南