桥接模式

1.何为桥接模式

​ 桥接模式通常作为连接器或粘合剂,将两个“不相关的组件“连接起来。抽象的使用允许组件之间在不了解具体实现的情况下彼此交换(使用多态)。将抽象部分(业务功能)和实现部分(平台实现)分离,使它们可以独自变化

2.桥接模式的意义和使用场景

​ 有些类由于其实现逻辑,会有两个乃至多个维度的变化。这会导致类的数量急剧膨胀,耦合增强。如有n个业务类,m个平台实现类,那么就需要n*m个子类来实现这两个类的功能。桥接模式使用“对象间的组合关系”解耦了抽象和实现间的耦合。

3.桥接模式的实现

​ 在业务实现类里包含平台实现抽象基类,业务实现类继承自业务抽象基类。用不同平台对象去初始化业务实现对象就可以得到不同功能的实现。于是我们将n*m个功能子类转换成了n+m个子类。同时实现了业务功能和平台实现的独立变化(解耦)

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
60
61
62
63
64
// 实现部分的接口(Implementor)
class Implementor {
public:
virtual void operationImpl() = 0;
};

// 具体实现类A(Concrete Implementor A)
class ConcreteImplementorA : public Implementor {
public:
void operationImpl() override {
// 实现A的操作
}
};

// 具体实现类B(Concrete Implementor B)
class ConcreteImplementorB : public Implementor {
public:
void operationImpl() override {
// 实现B的操作
}
};

// 抽象部分的接口(Abstraction)
class Abstraction {
protected:
Implementor* implementor;

public:
Abstraction(Implementor* impl) : implementor(impl) {}

virtual void operation() = 0;
};

// 扩展抽象部分的类(Refined Abstraction)
class RefinedAbstraction : public Abstraction {
public:
RefinedAbstraction(Implementor* impl) : Abstraction(impl) {}

void operation() override {
// 执行其他操作
implementor->operationImpl();
// 执行其他操作
}
};

int main() {
Implementor* implementorA = new ConcreteImplementorA();
Abstraction* abstractionA = new RefinedAbstraction(implementorA);

abstractionA->operation();

Implementor* implementorB = new ConcreteImplementorB();
Abstraction* abstractionB = new RefinedAbstraction(implementorB);

abstractionB->operation();

delete abstractionA;
delete implementorA;

delete abstractionB;
delete implementorB;

return 0;
}