在Java中,桥接模式(Bridge Pattern)的核心思想是将抽象部分与其实现部分分离,使其可以独立变化。以下是桥接模式的一个简单示例,我们将创建一个图形渲染系统,该系统允许用户选择不同的形状(抽象部分)和不同的颜色策略(实现部分)。
首先,我们定义抽象部分------图形接口及其两个实现:
java
// 抽象部分 - 图形接口
public interface Shape {
void draw(ColorImplementor color);
}
// 抽象部分的实现 - 具体图形
public class Circle implements Shape {
@Override
public void draw(ColorImplementor color) {
System.out.println("Drawing a circle with " + color.getColor());
}
}
public class Rectangle implements Shape {
@Override
public void draw(ColorImplementor color) {
System.out.println("Drawing a rectangle with " + color.getColor());
}
}
// 实现部分的抽象接口 - 颜色策略
public interface ColorImplementor {
String getColor();
}
// 实现部分的具体类 - 不同的颜色策略
public class RedColor implements ColorImplementor {
@Override
public String getColor() {
return "Red";
}
}
public class BlueColor implements ColorImplementor {
@Override
public String getColor() {
return "Blue";
}
}
然后,我们可以创建一个桥接使用的客户端代码:
java
public class BridgePatternDemo {
public static void main(String[] args) {
Shape redCircle = new Circle();
Shape blueRectangle = new Rectangle();
ColorImplementor red = new RedColor();
ColorImplementor blue = new BlueColor();
// 组合图形与颜色策略
redCircle.draw(red);
blueRectangle.draw(blue);
// 输出结果类似于:
// Drawing a circle with Red
// Drawing a rectangle with Blue
}
}
在这个例子中,Shape
是抽象部分,它定义了所有图形共有的行为(绘制),但是不关心如何绘制颜色。Circle
和Rectangle
是抽象部分的具体实现,它们都依赖于ColorImplementor
接口来决定颜色策略。
ColorImplementor
则是实现部分的抽象接口,RedColor
和BlueColor
是它的具体实现。这样,我们就可以独立地修改图形种类或颜色策略,而不影响彼此的实现细节。这就是桥接模式的应用。