- 桥接模式(Bridge Pattern)是一种结构型设计模式,它将抽象部分与实现部分分离,使它们可以独立变化。在桥接模式中,抽象类和它的实现类之间使用组合/聚合关系,而不是继承关系。这样,客户端代码可以针对抽象编程,而实现细节则可以在运行时动态地指定。
- 场景:
假设我们要设计一个图形绘制系统,其中包含了多种形状(如圆形、矩形、三角形)和多种绘图方式(如使用Java 2D API、OpenGL等)。我们希望能够在不修改形状类的情况下,灵活地添加新的绘图方式,反之亦然
实现:
- Shape接口:定义所有形状共有的方法。
| public interface Shape { |
| void draw(); |
| } |
- Circle、Rectangle、Triangle类:实现Shape接口,并提供各自的draw()方法的具体实现。
| public class Circle implements Shape { |
| @Override |
| public void draw() { |
| System.out.println("Drawing a Circle"); |
| } |
| } |
| |
| public class Rectangle implements Shape { |
| @Override |
| public void draw() { |
| System.out.println("Drawing a Rectangle"); |
| } |
| } |
| |
| public class Triangle implements Shape { |
| @Override |
| public void draw() { |
| System.out.println("Drawing a Triangle"); |
| } |
| } |
- DrawAPI接口:定义绘图方式的接口。
| public interface DrawAPI { |
| void draw(Shape shape); |
| } |
- Java2DDrawAPI、OpenGLDrawAPI类:实现DrawAPI接口,并提供各自的draw()方法的具体实现。
| public class Java2DDrawAPI implements DrawAPI{ |
| |
| @Override |
| public void draw(Shape shape) { |
| System.out.print("Using Java 2D API to draw: "+shape.getClass().getSimpleName()); |
| shape.draw(); |
| } |
| public class OpenGLDrawAPI implements DrawAPI{ |
| |
| @Override |
| public void draw(Shape shape) { |
| System.out.print("Using OpenGL API to draw :"+shape.getClass().getSimpleName()); |
| shape.draw(); |
| } |
| } |
- 客户端代码:使用桥接模式来绘制图形。
| public class Client { |
| public static void main(String[] args) { |
| Circle circle = new Circle(); |
| Rectangle rectangle = new Rectangle(); |
| Triangle triangle = new Triangle(); |
| |
| |
| Java2DDrawAPI java2DDrawAPI = new Java2DDrawAPI(); |
| java2DDrawAPI.draw(circle); |
| java2DDrawAPI.draw(rectangle); |
| java2DDrawAPI.draw(triangle); |
| |
| |
| OpenGLDrawAPI openGLDrawAPI = new OpenGLDrawAPI(); |
| openGLDrawAPI.draw(circle); |
| openGLDrawAPI.draw(rectangle); |
| openGLDrawAPI.draw(triangle); |
| } |
代码结果输出:
| Using Java 2D API to draw: CircleDrawing a Circle |
| Using Java 2D API to draw: RectangleDrawing a Rectangle |
| Using Java 2D API to draw: TriangleDrawing a Triangle |
| Using OpenGL API to draw :CircleDrawing a Circle |
| Using OpenGL API to draw :RectangleDrawing a Rectangle |
| Using OpenGL API to draw :TriangleDrawing a Triangle |
- 在这个案例中,Shape接口定义了所有形状共有的方法,而DrawAPI接口定义了绘图方式的接口。Circle、Rectangle、Triangle类实现了Shape接口,Java2DDrawAPI和OpenGLDrawAPI类实现了DrawAPI接口。客户端代码通过组合Shape对象和DrawAPI对象来绘制图形,实现了抽象部分与实现部分的解耦。这样,我们可以很容易地添加新的形状或绘图方式,而不需要修改现有的代码。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)