设计模式(四)

本文总阅读量

适配器模式

简单的说就是(๑•ᴗ•๑):

电源适配器(把220V的交流电转换为电器能够使用的电压)

专业一点就是(⊙ˍ⊙):

想复用一些现成的类,但是接口又与复用环境要求不一致。那么使用适配器转换接口。


1、类适配器

  • [x] 适用于C++(因为它支持多继承)

ClassAdapter

适配器类继承了Target和Adaptee的方法,所以可以直接在方法中调用Adaptee的方法,实现接口的转换

2、对象适配器

ObjectAdapter

适配器类继承了Target的方法,并且含有Adaptee的对象(或者指针)。可以再方法中调用Adaptee的方法,实现接口转换

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
/*
* Adapter.cpp
*
* Created on: 2016年3月11日 下午4:48:49
* Author: Wayne 13186259527@163.com
*/


#include <iostream>
using namespace std;

class Target {
public:
virtual void Method() {
cout << "我要20V的电压" << endl;
}
};
class Adaptee {
public:
void SpecialMethod() {
cout << "我这里提供10V的电压" << endl;
}
};

//类适配器
class ClsAdapter: public Target, private Adaptee {
public:
void Method() {
cout << "类适配器" << endl;
cout << "你要20V,我给你20V" << endl;
SpecialMethod();
cout << "我给你转换为20V" << endl;
}
};

//对象适配器
class ObjAdapter: public Target {
private:
Adaptee ptr;
public:
/*ObjAdapter(Adaptee ptr){
this->ptr = ptr;
}*/

void Method() {
cout << "对象适配器" << endl;
cout << "你要20V,我给你20V" << endl;
ptr.SpecialMethod();
//ptr->SpecialMethod();
cout << "我给你转换为20V" << endl;
}
};

int main(void) {
//类适配器
ClsAdapter cls;
cls.Method();
cout << "==================" << endl;
//对象适配器
ObjAdapter obj;
obj.Method();
return 0;
}