适配器模式
适配器模式是很好理解的模式了,生活中也非常常见,什么插头2口转3口,什么USB转PS2,这都算是适配器模式。说白了,就是如果有一些东西提供的接口你很像用,但是你手头没有好的接口使用它,这个就需要一个适配器,将你需要的接口转换成你所拥有的接口。这样的好处也是显而易见,就是你不用改变你现在所拥有的接口,保证你在任何地方的用法都不需要修改,然后底层的实现由适配器调用需要的接口来具体实现。
常见的场景
使用第三方库的时候,第三方的库肯定不能适用所有的系统,所以需要一个适配器来转换。
优点
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
运行结果
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 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】