adapter pattern--适配器模式
adapter pattern,又称wrapper(包装) pattern
在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象”放在新的环境中应用,但是新环境要求的接口是这些现存对象所不满足的。Adapter设计模式就是为了应对这种“迁移的变化”,以使客户系统既能利用现有对象的良好实现,同时又能满足新的应用环境所要求的接口。
“Convert the interface of a class into another interface clients expect. Adapter lets classes work together that couldn’t otherwise because of incompatible interfaces.” ---GoF
将一个类的接口转化为客户端所期望的接口。适配器模式使得原本拥有不兼容接口的类能一起“工作”。--GoF
适配器一般有两种形式:
第一种形式
该形式是采用继承方式实现复用Adaptee接口。
实例解析:
例如有一个人看电视,现在想换台了,有一个换台请求的接口,而电视机也可以接收信号换台,它拥有一个接收信号的接口,现在很清楚这两个类之间不兼容,我们需要一个适配器来使得这两个拥有不兼容接口的类一起工作。采取继承复用的方式。
1 class IdeaChange 2 { 3 public: 4 virutal void RequestChange( )=0; 5 }; 6 class Tv 7 { 8 public: 9 void AcceptRequest( ); 10 }; 11 void Tv::AcceptRequest( ) 12 { 13 std::cout<<"Accept the request of ChannelChange"<<std::endl; 14 } 15 class Adapter:public IdeaChange,private Tv 16 { 17 public: 18 void RequestChange( ); 19 }; 20 void Adapter::RequestChange( ) 21 { 22 std::cout<<"Request for change channel"<<std::endl; 23 AcceptRequest( ); 24 } 25 26 int main(int argc,char ** argv) 27 { 28 Adapter a; 29 a.RequestChange( ); 30 return 0; 31 }
运行结果
第二种形式
该形式是采用组合方式实现复用Adaptee接口。
还是上面一样的实例
1 class IdeaChange 2 { 3 public: 4 virutal void RequestChange( )=0; 5 }; 6 class Tv 7 { 8 public: 9 void AcceptRequest( ); 10 }; 11 void Tv::AcceptRequest( ) 12 { 13 std::cout<<"Accept the request of ChannelChange"<<std::endl; 14 } 15 class Adapter:public IdeaChange 16 { 17 public: 18 Adapter( ); 19 ~Adapter( ); 20 void RequestChange( ); 21 private: 22 Tv* t; 23 24 }; 25 Adapter::Adapter( ) 26 { 27 t=new Tv( ); 28 } 29 Adapter::~Adapter( ) 30 { 31 delete t; 32 } 33 void Adapter::RequestChange( ) 34 { 35 std::cout<<"Request for change channel"<<std::endl; 36 t->AcceptRequest( ); 37 } 38 39 int main(int argc,char ** argv) 40 { 41 Adapter a; 42 a.RequestChange( ); 43 return 0; 44 }
运行结果为
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述
2009-12-16 SQL注入(二)