-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathAdapter.cpp
More file actions
64 lines (55 loc) · 1.47 KB
/
Adapter.cpp
File metadata and controls
64 lines (55 loc) · 1.47 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
64
//Adapter Pattern
#include<iostream>
using namespace std;
class Target { //抽象适配器
public:
Target() {}
virtual ~Target() {}
virtual void Request() {
cout << "Target request" << endl;
}
};
class Adaptee {
public:
Adaptee() {}
~Adaptee() {}
void SpecificRequest() {
cout << "Adaptee::SpecificRequest" << endl;
}
};
//类模式,适配器类,通过public继承获得接口继承的效果,通过private继承获得实现继承的效果
class Adapter1 :public Target, private Adaptee { //具体适配器
public:
Adapter1() {}
~Adapter1() {}
void Request(){
cout << "Adapter::Request" << endl;
this->SpecificRequest();
cout << "-----------------" << endl;
}
};
//对象模式,适配器类,继承Target类,采用组合的方式实现Adaptee的复用
class Adapter2 :public Target { //具体适配器
public:
Adapter2() :m_adaptee(new Adaptee()) {}
Adapter2(Adaptee* adaptee) :m_adaptee(adaptee) {}
~Adapter2() {}
void Request(Adaptee* adaptee) {
cout << "Adapter::request" << endl;
this->m_adaptee->SpecificRequest();
cout << "---------------" << endl;
}
private:
Adaptee* m_adaptee;
};
int main() {
Target* pTarget = new Adapter1();
pTarget->Request();
Adaptee* pAdaptee = new Adaptee();
Target* pt1 = new Adapter1();
Adapter1* mAdapter1 = new Adapter1();
Adaptee* pAdaptee = new Adaptee();
Target* pTarget2 = new Adapter2(pAdaptee);
pTarget->Request();
return 0;
}