桥接模式UML类图:
桥接模式通常包含以下角色:
- 抽象类(Abstraction):定义了抽象类的接口,维护一个指向实现对象的引用。
- 扩展抽象类(RefinedAbstraction):扩展抽象类,实现抽象类中的业务逻辑,可以覆盖或扩展抽象类的方法。
- 实现接口(Implementor):定义了实现类的接口,不继承抽象类。实现所有与抽象类相关的操作,这些操作定义在抽象类中。
- 具体实现类(ConcreteImplementor):实现实现接口的具体类,提供具体的实现代码。
一、实现接口(Implementor)
java
public interface Implementor {
void operationImpl();
}
二、具体实现类(ConcreteImplementor)
java
public class ConcreteImplementorA implements Implementor {
@Override
public void operationImpl() {
System.out.println("ConcreteImplementorA operationImpl");
}
}
public class ConcreteImplementorB implements Implementor {
@Override
public void operationImpl() {
System.out.println("ConcreteImplementorB operationImpl");
}
}
三、抽象类(Abstraction)
java
public abstract class Abstraction {
protected Implementor implementor;
protected Abstraction(Implementor implementor) {
this.implementor = implementor;
}
public abstract void operation();
}
四、扩展抽象类(RefinedAbstraction)
java
public class RefinedAbstraction extends Abstraction {
public RefinedAbstraction(Implementor implementor) {
super(implementor);
}
@Override
public void operation() {
System.out.println("RefinedAbstraction operation");
implementor.operationImpl();
}
}
五、测试案例
java
public class BridgePatternDemo {
public static void main(String[] args) {
Abstraction abstraction = new RefinedAbstraction(new ConcreteImplementorA());
abstraction.operation();
Abstraction anotherAbstraction = new RefinedAbstraction(new ConcreteImplementorB());
anotherAbstraction.operation();
}
}
桥接模式的应用场景
- 当一个类存在两个独立变化的维度,且这两个维度都需要独立扩展时。
- 当不希望使用继承来扩展一个类时,继承可能会导致系统类层次结构的爆炸式增长。
- 当需要对客户端隐藏实现细节时。