设计模式 - 桥接模式(Bridge Pattern)
介绍
桥接模式是一种结构型设计模式,它将抽象部分与它的实现部分分离,使它们都可以独立变化。桥接模式的核心在于将抽象与实现分离,从而可以独立地扩展抽象和实现部分。
实现
我们以一个图形绘制的例子来说明桥接模式的实现。假设我们要绘制不同形状的颜色,例如红色的圆形和蓝色的矩形。
定义抽象
首先定义一个形状的抽象类,以及颜色的抽象类。
interface Shape {
void draw();
}
interface Color {
void applyColor();
}
创建具体实现类
然后创建具体的颜色实现类和形状实现类。
class Red implements Color {
@Override
public void applyColor() {
System.out.print("Red ");
}
}
class Blue implements Color {
@Override
public void applyColor() {
System.out.print("Blue ");
}
}
abstract class AbstractShape {
protected Color color;
public AbstractShape(Color color) {
this.color = color;
}
public void setColor(Color color) {
this.color = color;
}
}
class Circle extends AbstractShape {
public Circle(Color color) {
super(color);
}
@Override
public void draw() {
color.applyColor();
System.out.println("Circle");
}
}
class Square extends AbstractShape {
public Square(Color color) {
super(color);
}
@Override
public void draw() {
color.applyColor();
System.out.println("Square");
}
}
使用桥接模式
接下来,在主程序中使用桥接模式来绘制不同颜色的图形。
public class DrawingApp {
public static void main(String[] args) {
// 创建红色的圆形
Shape redCircle = new Circle(new Red());
redCircle.draw(); // 输出 "Red Circle"
// 创建蓝色的矩形
Shape blueSquare = new Square(new Blue());
blueSquare.draw(); // 输出 "Blue Square"
// 更改图形的颜色
redCircle.setColor(new Blue());
redCircle.draw(); // 输出 "Blue Circle"
}
}
使用场景
桥接模式适用于以下情况:
- 如果你不希望在抽象和它的实现部分之间有一个固定的绑定关系。例如,这种情况可通过在程序运行时更改部分抽象的实现来达到。
- 根据环境的不同,控制系统可以选择不同的变体。
- 对一个抽象的实现部分的修改应对客户不产生影响,即客户的代码不必重新编译。
总结
桥接模式通过分离抽象和实现,允许两者独立发展。这有助于减少类之间的依赖,提高系统的灵活性。桥接模式适用于需要在运行时改变实现细节的情况,或者当一个系统需要通过简单的配置就能选择不同的实现版本时。
以上就是桥接模式的一个实现案例,希望这篇文章能帮助你更好地理解和应用桥接模式。
评论区