crazyandcoder

设计模式教程(9-桥接模式)

2021.07.13

桥接模式.png

1 定义

桥接模式 (Bridge Pattern):将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体 (Handle and Body) 模式或接口 (Interface) 模式。

2 UML 类图

桥接模式.gif

桥接模式包含如下角色:

  1. Abstraction:抽象类
  2. RefinedAbstraction:扩充抽象类
  3. Implementor:实现类接口
  4. ConcreteImplementor:具体实现类

3 代码示例

3.1 Implementor

public interface Implementor {
    void operationImpl();
}

3.2 ConcreteImplementorA

public class ConcreteImplementorA implements Implementor{
    @Override
    public void operationImpl() {
        System.out.println("ConcreteImplementorA ----> operationImpl");
    }
}

3.3 ConcreteImplementorB

public class ConcreteImplementorB implements Implementor{
    @Override
    public void operationImpl() {
        System.out.println("ConcreteImplementorB ----> operationImpl");
    }
}

3.4 Abstraction

public abstract class Abstraction {
    protected Implementor mImp;
    public void operation() {

    }
    public Abstraction(Implementor mImp) {
        this.mImp = mImp;
    }
}

3.5 RefineAbstraction

public class RefineAbstraction extends Abstraction {

    public RefineAbstraction(Implementor mImp) {
        super(mImp);
    }

    @Override
    public void operation() {
        mImp.operationImpl();
    }
}

3.6 BridgeTest

public class BridgeTest {
    public static void main(String args[]) {
        Implementor implementorA=new ConcreteImplementorA();
        implementorA.operationImpl();

        Abstraction abstractionA=new RefineAbstraction(implementorA);
        abstractionA.operation();
        
        Abstraction abstractionB=new RefineAbstraction(new ConcreteImplementorB());
        abstractionB.operation();
        
    }
}

3.7 打印结果

ConcreteImplementorA ----> operationImpl
ConcreteImplementorA ----> operationImpl
ConcreteImplementorB ----> operationImpl

4 优缺点

4.1 优点

  1. 分离抽象接口及其实现部分。
  2. 桥接模式提高了系统的可扩充性,在两个变化维度中任意扩展一个维度,都不需要修改原有系统。
  3. 实现细节对客户透明,可以对用户隐藏实现细节

4.2 缺点

  1. 桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进 行设计与编程。- 桥接模式要求正确识别出系统中两个独立变化的维度,因此其使用范围具有一定的局限性。