- 桥接模式(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();
//使用Java 2D API绘制图形
Java2DDrawAPI java2DDrawAPI = new Java2DDrawAPI();
java2DDrawAPI.draw(circle);
java2DDrawAPI.draw(rectangle);
java2DDrawAPI.draw(triangle);
//使用OpenGL API绘制图形
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对象来绘制图形,实现了抽象部分与实现部分的解耦。这样,我们可以很容易地添加新的形状或绘图方式,而不需要修改现有的代码。