随笔 - 68  文章 - 0 评论 - 41 阅读 - 56万
< 2025年3月 >
23 24 25 26 27 28 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 1 2 3 4 5

适配器模式

适配器模式是很好理解的模式了,生活中也非常常见,什么插头2口转3口,什么USB转PS2,这都算是适配器模式。说白了,就是如果有一些东西提供的接口你很像用,但是你手头没有好的接口使用它,这个就需要一个适配器,将你需要的接口转换成你所拥有的接口。这样的好处也是显而易见,就是你不用改变你现在所拥有的接口,保证你在任何地方的用法都不需要修改,然后底层的实现由适配器调用需要的接口来具体实现。

image

 

常见的场景

使用第三方库的时候,第三方的库肯定不能适用所有的系统,所以需要一个适配器来转换。

 

优点

1.屏蔽了具体的实现方式,实现了依赖倒转。

2.可以把不统一的接口封装起来,使之成为统一的接口。

3.把本来不方便适用的接口转换成统一的接口。

 

缺点

 

C++实现

 

复制代码
 1 #ifndef _ADAPTER_H_
 2 #define _ADAPTER_H_
 3 
 4 #include "Adaptee.h"
 5 
 6 
 7 class Target
 8 {
 9 public:
10     Target();
11     virtual ~Target();
12 
13     virtual void request() = 0;
14 };
15 
16 
17 class Adapter: public Target
18 {
19 public:
20     Adapter();
21     ~Adapter();
22 
23     void request();
24 
25 
26 private:
27     Adaptee* adaptee;
28 };
29 
30 
31 #endif
复制代码
复制代码
 1 #include "Adapter.h"
 2 
 3 
 4 Target::Target()
 5 {
 6 
 7 }
 8 
 9 
10 Target::~Target()
11 {
12 
13 }
14 
15 
16 Adapter::Adapter():
17     adaptee(new Adaptee())
18 {
19 
20 }
21 
22 
23 Adapter::~Adapter()
24 {
25 
26 }
27 
28 
29 void Adapter::request()
30 {
31     adaptee->specificRequest();
32 }
复制代码
复制代码
 1 #ifndef _ADAPTEE_H_
 2 #define _ADAPTEE_H_
 3 
 4 class Adaptee
 5 {
 6 public:
 7     Adaptee();
 8     ~Adaptee();
 9 
10     void specificRequest();
11 
12 };
13 
14 
15 #endif
复制代码
复制代码
 1 #include "Adaptee.h"
 2 #include <stdio.h>
 3 
 4 
 5 Adaptee::Adaptee()
 6 {
 7 
 8 }
 9 
10 
11 Adaptee::~Adaptee()
12 {
13 
14 }
15 
16 
17 void Adaptee::specificRequest()
18 {
19     fprintf(stderr, "this is specificRequest\n");
20 }
复制代码
复制代码
1 #include "Adapter.h"
2 
3 
4 int main()
5 {
6     Target* tar = new Adapter();
7     tar->request();
8     return 0;
9 }
复制代码
1 g++ -o client client.cpp Adapter.cpp Adaptee.cpp

 

运行结果

image

posted on   曾经的你|  阅读(9150)  评论(5编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示