Home 桥接模式
Post
Cancel

桥接模式

Bridge Pattern 对象结构型模式

意图

将抽象部分与其实现部分分离,使它们都可以独立地变化

结构

桥接模式

其中:

  • Abstraction 定义抽象类的接口,维护一个指向 Implementor 类型对象的指针
  • RefinedAbstraction 扩充由 Abstraction 定义的接口
  • Implementor 定义实现类的接口,该接口不一定要与 Abstraction 的接口完全一致;事实上这两个接口可以完全不同 一般来说,Implementor 接口仅提供基本操作,而 Abstraction 定义了基于这些基本操作的较高层次的操作
  • ConcreteImplementor 实现 Implementor 接口并定义它的具体实现

适用性

Bridge 模式适用于:

  • 不希望在抽象和它的实现部分之间有一个固定的绑定关系。例如,这种情况可能是因为,在程序运行时刻实现部分应可以被选择或者切换
  • 类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充。这是 Bridge 模式使得开发者可以对不同的抽象接口和实现部分进行组合,并分别对它们进行扩充
  • 对一个抽象的实现部分的修改应对客户不产生影响,即客户代码不必重新编译
  • (C++) 想对客户完全隐藏抽象的实现部分
  • 有许多类要生成的类层次结构
  • 想在多个对象间共享实现 (可能使用引用计数) ,但同时要求客户并不知道这一点

例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
public class main {
    public static void main(String[] args) {
        Product ProductA1 = new ProductA();
        Product ProductA2 = new ProductA();

        Color red = new Red();
        ProductA1.setName("P-A1");
        ProductA1.setColor(red);
        ProductA1.Operation;

        Color blue = new Blue();
        ProductA1.setName("P-A2");
        ProductA1.setColor(blue);
        ProductA1.Operation;
    }
}

abstract class Product{
    private String name;
    protected Color color;

    public void setName(String name){
        this.name = name;
    }
    public String getName(){
        return this.name;
    }

    public setColor(Color color){
        this.color = color;
    }

    public abstract void Operation();
} 

class ProductA extends Product{
    @Override
    public void Operation(){
        color.OperationImp(this.getName());
    }
}

class Color{
    public void OperationImp(String name);
}

class Red extends Color{
    @Override
    public void OperationImp(String name){
        System.out.println(name + ": red")
    }
}

class Blue extends Color{
    @Override
    public void OperationImp(String name){
        System.out.println(name + ": blue")
    }
}
This post is licensed under CC BY 4.0 by the author.

适配器模式

组合模式