桥接模式

scorlw 发布于

桥接模式

设计模式

Bridge模式又叫做桥接模式,是构造型的设计模式之一。 Bridge模式基于类的最小设计原则,通过使用封装,聚合以及继承等行为来让不同的类承担不同的责任。它的主要特点是把抽象(abstraction)与行为实现(implementation)分离开来,从而可以保持各部分的独立性以及应对它们的功能扩展。

image-20201012220325331

Client

Bridge模式的使用者

Abstraction

抽象类接口(接口或抽象类)维护对行为实现(Implementor)的引用

Refined Abstraction

Abstraction子类

Implementor

行为实现类接口( Abstraction接口定义了基于Implementor接口的更高层次的操作)

Concretelmplementor

Implementor子类

适用于:

桥接模式( Bridge Pattern)是将抽象部分与实现部分分离(解耦合),使它们都可以独立的变化。

车 安装 发动机:不同型号的车,安装不同型号的发动机

图形 填 颜色:不同形状的图形,填充上不同的颜色

将“车 安装 发动机”这个抽象 和 实现进行分离;两个名字 就设计两个类;

将“图形 填 颜色”这个抽象 和 实现进行分离,两个名字 就设计两个类。

代码

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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#include <iostream>

using namespace std;

class Engine
{
public:
virtual void InstallEngine() = 0;
};

class Engine4400cc : public Engine
{
public:
virtual void InstallEngine()
{
cout << "4400cc is installed" << endl;
}
};

class Engine4500cc : public Engine
{
public:
virtual void InstallEngine()
{
cout << "4500cc is installed" << endl;
}
};

class Car
{
public:
Car(Engine* engine)
{
m_engine = engine;
};
virtual void installEngine() = 0;
protected:
Engine* m_engine;
};

class WBM5 : public Car
{
public:
//父类构造函数有参,则子类构造函数也需要有参来构造父类
WBM5(Engine* engine) : Car(engine)
{

}
virtual void installEngine()
{
cout << "get WBM5" << endl;
m_engine->InstallEngine();
}
};

class WBM6 : public Car
{
public:
WBM6(Engine* engine) : Car(engine)
{

}
virtual void installEngine()
{
cout << "get WBM6" << endl;
m_engine->InstallEngine();
}
};
int main()
{
Engine *engine = NULL;
WBM6 *wbm6 = NULL;

engine = new Engine4400cc;
wbm6 = new WBM6(engine);
wbm6->installEngine();

delete wbm6;
delete engine;

cout << "Hello world!" << endl;
return 0;
}

输出:

1
2
3
get WBM6
4400cc is installed
Hello world!