-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathLinary_Bridge.h
138 lines (115 loc) · 2.91 KB
/
Linary_Bridge.h
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
/*****************************************************************/
/* 设计模式————桥梁模式
/* 作者:李凝瑞
/* 时间:2015.05.26
/*****************************************************************/
/** 桥梁模式:将抽象和实现解耦,使得两者可以独立变化
* 一个实现系统能从多个角度去分类,每种分类都可能变化,
* 那就把这种多角度分离出来让他们独立变化
*/
#pragma once
namespace linary_bridge {
/**
* 苹果手机硬件配置不高,但操作系统好;三星手机硬件配置高,但操作系统懒
* 这里面有三个变化量:手机品牌,硬件,操作系统
*/
class Hardware {
public:
// 硬件配置要被手机搭载
virtual void BeCarried() = 0;
};
class OperSystem {
public:
// 操作系统必须能运行
virtual void Run() = 0;
};
// 抽象
class PhoneBrand {
public:
//PhoneBrand() {}
PhoneBrand(Hardware * hardware, OperSystem * operSystem) {
this->hardware = hardware;
this->operSystem = operSystem;
}
// 自身的行为
void Use() {
hardware->BeCarried();
operSystem->Run();
}
private:
Hardware * hardware;
OperSystem * operSystem;
};
// 一般的硬件配置
class CommonHardware : public Hardware {
public:
void BeCarried() {
std::cout << "1G RAM,Apple A7 CPU" << std::endl;
}
};
// 高端的硬件配置
class AdvancedHardware : public Hardware {
public:
void BeCarried() {
std::cout << "4G RAM,高通 X7500 CPU" << std::endl;
}
};
// IOS操作系统
class IOS : public OperSystem {
public:
void Run() {
std::cout << "运行流畅,无卡顿" << std::endl;
}
};
// Android操作系统
class Android : public OperSystem {
void Run() {
std::cout << "运行经常卡顿" << std::endl;
}
};
// 苹果手机
class IPhone : public PhoneBrand {
public:
// 传入特定类型的参数,调用父类构造方法
IPhone(CommonHardware * hardware, IOS * operSystem) : PhoneBrand(hardware, operSystem){}
void Use() {
// 修正父类的使用行为
PhoneBrand::Use();
std::cout << "苹果用户很开心" << std::endl;
}
};
// 三星手机
class Note4 : public PhoneBrand {
public:
// 传入特定类型的参数,调用父类构造方法
Note4(AdvancedHardware * hardware, Android * operSystem) : PhoneBrand(hardware, operSystem) {}
void Use() {
// 修正父类的使用行为
PhoneBrand::Use();
std::cout << "安卓用户很愤怒" << std::endl;
}
};
// 测试代码
static void Test_Bridge() {
std::cout << "--------------------------" << std::endl;
std::cout << "-- 桥接模式测试 --" << std::endl;
std::cout << "--------------------------" << std::endl;
// 定义实现化角色
CommonHardware * commonHardware = new CommonHardware();
AdvancedHardware * advancedHardware = new AdvancedHardware();
IOS * ios = new IOS();
Android * android = new Android();
// 定义抽象化角色
IPhone * iPhone = new IPhone(commonHardware, ios);
Note4 * note4 = new Note4(advancedHardware, android);
iPhone->Use();
note4->Use();
delete note4;
delete iPhone;
delete android;
delete ios;
delete advancedHardware;
delete commonHardware;
std::cout << std::endl;
}
};