适配器模式(Adapter Pattern)
# 适配器模式(Adapter Pattern)
适配器模式(Adapter Pattern)是一种结构设计模式,用于将一个类的接口转换成客户端所期望的另一种接口。它允许不兼容的类能够合作共同工作。
# 概念
适配器模式允许通过引入一个适配器类,将一个类的接口转换成客户端所期望的另一种接口。这样,客户端就可以使用适配器类来调用目标类的方法,而不需要修改客户端代码。
# 思想
适配器模式通过将客户端代码和现有类进行解耦,使得现有类可以在不修改其代码的情况下与客户端协同工作。适配器类作为中间件,将客户端的请求转发给现有类,并将现有类的响应转换成客户端所期望的格式。
# 角色
- 目标接口(Target Interface):定义客户端所期望的接口。
- 适配器(Adapter):实现目标接口,并持有一个现有类的实例,在接口方法中将请求转发给现有类。
- 现有类(Adaptee):包含需要被适配的方法和功能。
# 优点
- 解耦性:适配器模式将客户端和现有类解耦,使得它们可以独立进行修改和扩展。
- 重用性:适配器模式可以重用现有类的功能,无需修改现有类的代码。
- 扩展性:通过添加新的适配器类,可以方便地增加新的适配器,以适应不同的需求。
# 缺点
- 增加了额外的类:适配器模式引入了适配器类,增加了代码的复杂性。
- 运行时性能损耗:由于适配器的存在,调用过程中会增加一些额外的开销。
# 类图
@startuml
class Client {
+request()
}
interface TargetInterface {
+request()
}
class Adapter {
-adaptee: Adaptee
+request()
}
class Adaptee {
+specificRequest()
}
Client --> TargetInterface
Adapter --> TargetInterface
Adapter --> Adaptee
@enduml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 示例代码
下面是一个使用C++实现的适配器模式的示例代码:
#include <iostream>
// 目标接口
class TargetInterface {
public:
virtual void request() = 0;
};
// 现有类
class Adaptee {
public:
void specificRequest() {
std::cout << "Adaptee's specificRequest() called." << std::endl;
}
};
// 适配器
class Adapter : public TargetInterface {
private:
Adaptee* adaptee;
public:
Adapter(Adaptee* adaptee) : adaptee(adaptee) {}
void request() override {
adaptee->specificRequest();
}
};
// 客户端
class Client {
private:
TargetInterface* target;
public:
Client(TargetInterface* target) : target(target) {}
void makeRequest() {
target->request();
}
};
int main() {
Adaptee* adaptee = new Adaptee();
Adapter* adapter = new Adapter(adaptee);
Client client(adapter);
client.makeRequest();
delete adaptee;
delete adapter;
return 0;
}
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
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
运行结果:
Adaptee's specificRequest() called.
1
示例代码中,我们有一个现有类Adaptee
,它包含一个名为specificRequest
的方法。我们希望在客户端Client
中调用TargetInterface
接口的request
方法来使用Adaptee
的功能。
为了实现适配,我们创建了一个适配器类Adapter
,它继承自TargetInterface
接口,并持有一个Adaptee
对象。在适配器的request
方法中,我们将请求转发给Adaptee
的specificRequest
方法。
在main
函数中,我们创建了一个Adaptee
对象和一个适配器对象Adapter
,并将适配器对象传递给客户端Client
。然后,我们通过调用客户端的makeRequest
方法来触发适配器的请求过程。最终,输出结果显示Adaptee's specificRequest() called.
,表明适配器模式成功地将客户端的请求转发给了Adaptee
的功能。
编辑 (opens new window)
上次更新: 2023/06/10, 08:05:09
- 01
- Linux系统移植(五)--- 制作、烧录镜像并启动Linux02-05
- 03
- Linux系统移植(三)--- Linux kernel移植02-05