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
类并实现相关方法即可,整个系统的扩展性得到了极大提升。