桥接模式(Bridge Pattern)
是一种结构型设计模式,它通过将抽象部分与实现部分分离,使它们可以独立变化。它旨在解决多维度变化的复杂系统,使其能够通过组合的方式扩展,而不是通过继承。
桥接模式的应用场景
- 避免类层次结构的膨胀:有多种可能的扩展方向,使用继承会导致大量的子类。
- 希望实现和抽象部分独立变化:具体的实现和抽象接口的变化频率不同。
桥接模式的结构
- 抽象化(Abstraction):定义抽象类,并包含一个对实现部分的引用。
- 具体抽象化(Refined Abstraction):扩展抽象类。
- 实现化(Implementor):定义实现类接口,不一定与抽象化有相同的方法。一般来说,它提供基本操作方法,而抽象化定义基于这些基本操作的方法。
- 具体实现化(Concrete Implementor):实现实现化接口。
代码实现
假设我们有一个图形类层次结构,其中图形可以有不同的颜色。我们将图形和颜色解耦,使它们可以独立变化。
Implementor接口
public interface Color {
void applyColor();
}
Concrete Implementor实现
public class RedColor implements Color {
@Override
public void applyColor() {
System.out.println("Applying red color.");
}
}
public class GreenColor implements Color {
@Override
public void applyColor() {
System.out.println("Applying green color.");
}
}
Abstraction类
public abstract class Shape {
protected Color color;
protected Shape(Color color) {
this.color = color;
}
public abstract void draw();
}
Refined Abstraction实现
public class Circle extends Shape {
public Circle(Color color) {
super(color);
}
@Override
public void draw() {
System.out.print("Drawing Circle with color: ");
color.applyColor();
}
}
public class Square extends Shape {
public Square(Color color) {
super(color);
}
@Override
public void draw() {
System.out.print("Drawing Square with color: ");
color.applyColor();
}
}
使用桥接模式
public class Client {
public static void main(String[] args) {
Shape redCircle = new Circle(new RedColor());
redCircle.draw(); // 输出: Drawing Circle with color: Applying red color.
Shape greenSquare = new Square(new GreenColor());
greenSquare.draw(); // 输出: Drawing Square with color: Applying green color.
}
}
总结
通过桥接模式,我们将形状和颜色解耦,使得它们可以独立变化。我们可以在不改变颜色类的情况下增加新的形状,也可以在不改变形状类的情况下增加新的颜色。这种设计方式使得系统更加灵活和易于扩展。