MST

星途 面试题库

面试题:Java桥接模式在图形绘制场景中的应用

假设你要实现一个简单的图形绘制系统,有不同的图形(如圆形、矩形),且每种图形可以有不同的颜色(如红色、蓝色)。请使用Java桥接模式来设计这个系统的类结构,并简要说明桥接模式如何在此场景中实现解耦,提高可维护性和扩展性。
25.1万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

1. 定义抽象颜色接口

public interface Color {
    void applyColor();
}

2. 实现具体颜色类

public class RedColor implements Color {
    @Override
    public void applyColor() {
        System.out.println("应用红色");
    }
}
public class BlueColor implements Color {
    @Override
    public void applyColor() {
        System.out.println("应用蓝色");
    }
}

3. 定义抽象图形类,持有颜色接口引用

public abstract class Shape {
    protected Color color;

    public Shape(Color color) {
        this.color = color;
    }

    public abstract void draw();
}

4. 实现具体图形类

public class Circle extends Shape {
    public Circle(Color color) {
        super(color);
    }

    @Override
    public void draw() {
        System.out.print("绘制圆形,");
        color.applyColor();
    }
}
public class Rectangle extends Shape {
    public Rectangle(Color color) {
        super(color);
    }

    @Override
    public void draw() {
        System.out.print("绘制矩形,");
        color.applyColor();
    }
}

5. 使用示例

public class Main {
    public static void main(String[] args) {
        Shape redCircle = new Circle(new RedColor());
        redCircle.draw();

        Shape blueRectangle = new Rectangle(new BlueColor());
        blueRectangle.draw();
    }
}

桥接模式在此场景中实现解耦、提高可维护性和扩展性的说明

  • 解耦:桥接模式将图形和颜色这两个变化维度分离,图形类不再直接依赖具体的颜色实现,而是通过抽象的颜色接口进行交互。例如,新增一种颜色(如绿色),只需要实现Color接口的新类,而不需要修改任何图形类;同样,新增一种图形(如三角形),只需要继承Shape类并实现相关方法,不需要修改颜色相关的类。这使得图形和颜色的变化相互独立,实现了解耦。
  • 提高可维护性:由于图形和颜色的代码分离,当需要修改其中一个维度的代码时,不会影响到另一个维度。例如,修改红色的应用逻辑,只需要在RedColor类中修改,不会对图形类造成影响。这样代码结构更加清晰,维护起来更加容易。
  • 提高扩展性:在增加新的图形或颜色时,只需要按照桥接模式的结构进行扩展,符合开闭原则。比如新增一种紫色,只需要创建一个实现Color接口的PurpleColor类;新增一个菱形图形,只需要创建一个继承Shape类的Diamond类并实现相关方法即可,整个系统的扩展性得到了极大提升。