设计模式之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
// 实现部分接口
class Implementor {
public:
virtual void operationImpl() = 0;
};

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

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

// 抽象部分类
class Abstraction {
public:
Abstraction(Implementor* impl) : impl_(impl) {}

virtual void operation() = 0;

protected:
Implementor* impl_;
};

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

void operation() override {
impl_->operationImpl();
}
};

int main() {
Implementor* implA = new ConcreteImplementorA();
Implementor* implB = new ConcreteImplementorB();

Abstraction* abs1 = new RefinedAbstraction(implA);
Abstraction* abs2 = new RefinedAbstraction(implB);

abs1->operation();
abs2->operation();

return 0;
}

在上面的示例中,Implementor是实现部分的接口,它定义了实现部分的方法。ConcreteImplementorAConcreteImplementorB是具体的实现类,它们实现了Implementor接口中的方法。

Abstraction是抽象部分的类,它包含一个指向Implementor接口的指针。RefinedAbstraction是扩展抽象部分的类,它继承了Abstraction类,并实现了operation()方法,该方法调用了Implementor接口中的方法。

main()函数中,我们创建了两个Implementor对象,分别是ConcreteImplementorAConcreteImplementorB。然后,我们创建了两个RefinedAbstraction对象,分别使用ConcreteImplementorAConcreteImplementorB作为参数。最后,我们调用了operation()方法,该方法实际上调用了Implementor接口中的方法。由于RefinedAbstraction类包含了一个指向Implementor接口的指针,因此它可以与任何实现了Implementor接口的类一起工作。