定义
桥接模式(Bridge Pattern)是一种结构型设计模式,它通过将抽象部分与实现部分分离,使它们都可以独立地变化。桥接模式的关键在于将类的抽象部分与其实现部分解耦,以便两者可以独立地变化。这种设计模式的一个主要用途是避免类层次结构的指数增长,尤其是在有多维度变化时,例如设备种类与设备操作。
UML图
角色说明
- Abstraction(抽象类):提供客户端调用的接口,内部包含一个对实现部分对象(Implementor)的引用。
- RefinedAbstraction(扩展抽象类):扩展了Abstraction的功能,通过调用Implementor来实现具体操作。
- Implementor(实现接口):定义实现部分的接口,它不一定与Abstraction的接口完全一致,一般是独立的。
- ConcreteImplementor(具体实现类):实现具体的功能逻辑,它是实现部分的具体实现。
代码
// 实现接口
interface Implementor {
void operationImpl();
}
// 具体实现类A
class ConcreteImplementorA implements Implementor {
@Override
public void operationImpl() {
System.out.println("ConcreteImplementorA's implementation.");
}
}
// 具体实现类B
class ConcreteImplementorB implements Implementor {
@Override
public void operationImpl() {
System.out.println("ConcreteImplementorB's implementation.");
}
}
// 抽象类
abstract class Abstraction {
protected Implementor implementor;
public Abstraction(Implementor implementor) {
this.implementor = implementor;
}
public abstract void operation();
}
// 扩展抽象类
class RefinedAbstraction extends Abstraction {
public RefinedAbstraction(Implementor implementor) {
super(implementor);
}
@Override
public void operation() {
System.out.print("RefinedAbstraction is calling: ");
implementor.operationImpl();
}
}
// 客户端代码
public class BridgePatternDemo {
public static void main(String[] args) {
Implementor implA = new ConcreteImplementorA();
Abstraction abstractionA = new RefinedAbstraction(implA);
abstractionA.operation();
Implementor implB = new ConcreteImplementorB();
Abstraction abstractionB = new RefinedAbstraction(implB);
abstractionB.operation();
}
}
适用场景
- 当系统需要在多个维度上进行扩展,而又不希望产生大量的子类时。例如,设备种类(手机、电脑等)和设备操作(开机、关机、重启等)是两个独立的维度,可以使用桥接模式来分别处理。
- 当一个类需要在不同的环境下工作,且这些环境可能随时变化。
需要动态地切换实现时,桥接模式可以提供灵活性,因为实现和抽象可以独立变化。
总结
桥接模式通过将抽象与实现解耦,提供了一种灵活扩展和维护系统的方式,尤其适用于系统可能在多个维度上扩展的场景。