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