介绍
桥接模式(Bridge Pattern)是一种结构型设计模式,它主要目的是将抽象部分与它的实现部分分离,使它们都可以独立地变化。通过使用组合而非继承的方式,桥接模式能够把抽象和实现解耦,从而使得两者可以独立地改变和扩展。
桥接模式通常涉及以下几个角色:
- 抽象类(Abstraction):定义抽象类的接口,它持有一个对实现部分对象的引用。
- 扩展抽象类(RefinedAbstraction):是抽象类的具体实现者。对抽象类中定义的抽象方法做更具体的实现。
- 实现类接口(Implementor):定义实现类的接口,这个接口不需要与抽象类的接口相同,事实上两者可以完全不同。一般来说,实现类接口提供了基本操作,而抽象类定义了基于这些操作的较高层次的操作。
- 具体实现类(ConcreteImplementor):这些类实现了Implementor接口,给出了具体实现。
代码示例
下面是一个简单的桥接模式的Java代码示例:
假设我们有一个Shape
抽象类,它有一个Color
实现类接口。Shape
类中有一个Color
类型的对象,通过这个对象来设置Shape
的颜色。Color
是一个接口,有多个实现类,比如Red
和Green
。这样Shape
和Color
就通过一个桥接(组合)联系在一起,而不是继承。
// 实现类接口
interface Color {
void applyColor();
}
// 具体实现类
class Red implements Color {
public void applyColor() {
System.out.println("Red");
}
}
class Green implements Color {
public void applyColor() {
System.out.println("Green");
}
}
// 抽象类
abstract class Shape {
protected Color color;
// 构造函数,传入实现类接口对象
public Shape(Color c) {
this.color = c;
}
abstract public void applyColor();
}
// 扩展抽象类
class Circle extends Shape {
public Circle(Color c) {
super(c);
}
public void applyColor() {
System.out.print("Circle filled with color ");
color.applyColor();
}
}
class Square extends Shape {
public Square(Color c) {
super(c);
}
public void applyColor() {
System.out.print("Square filled with color ");
color.applyColor();
}
}
// 演示
public class BridgePatternDemo {
public static void main(String[] args) {
Shape redCircle = new Circle(new Red());
Shape greenSquare = new Square(new Green());
redCircle.applyColor();
greenSquare.applyColor();
}
}
在这个例子中,Shape
和Color
通过组合方式连接,而非继承。这样做的优点是,如果我们要增加新的Shape
或者新的Color
,只需扩展对应的类即可,无需修改现有的类,这就是桥接模式的力量:将抽象与实现解耦,使得两者可以独立变化。