-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathmain.cpp
More file actions
63 lines (51 loc) · 1.25 KB
/
Copy pathmain.cpp
File metadata and controls
63 lines (51 loc) · 1.25 KB
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
#include <iostream>
class Target {
public:
virtual ~Target() = default;
virtual void request() {
std::cout << "Target::Request()" << std::endl;
} //定义标准接口
};
class Adaptee { // 被适配的类
public:
virtual ~Adaptee() = default;
void specificRequest() {
std::cout << "Adaptee::SpecificRequest()" << std::endl;
}
};
// 对象模式 常用
class Adapter : public Target {
public:
Adapter() : m_pAdaptee(new Adaptee()) {}
Adapter(Adaptee *adaptee) : m_pAdaptee(adaptee) {}
~Adapter() = default;
void request() override {
m_pAdaptee->specificRequest();
}
private:
Adaptee* m_pAdaptee;
};
// 类模式
class Adapter2 : public Target, private Adaptee {
public:
Adapter2() = default;
~Adapter2() = default;
void request() override { //实现Target定义的Request接口
specificRequest();
}
};
using namespace std;
int main(int argc, char *argv[])
{
// 对象模式
// Adaptee * adaptee = new Adaptee();
Target* tar = new Adapter(); // Adapter(adaptee)
tar->request();
delete tar;
tar = new Adapter2();
tar->request();
delete tar;
return 0;
}
// www.cnblogs.com/jiese/p/3166396.html
// juejin.im/entry/58f5e080b123db2fa2b3c4c6