首页 > 代码库 > 适配器模式
适配器模式
在实际软件系统设计和开发中,经常会遇到这样的问题。为了完成快速某项工作,有时会选择购买第三方库。
但是可能会带来这样的问题:我们的应用程序已设计好的接口和第三方提供的接口不一致。为了让这些接口不兼容的类可以在一起工作,适配器(Adapter)模式就可以大显身手了。 它可以将一个类(第三方库)的接口转化为客户希望的接口。
适配器模式可以分为两种:类模式的Adapter采用继承的方式继承Adaptee的接口,而对象模式的Adapter则采用组合的方式实现对adaptee的复用。
以电压转化为例:
类模式:
形如:
代码:
#include <iostream> using namespace std; class Target { public: virtual ~Target(){} public: virtual void use5v() { cout << "工作电压为5v" << endl; } }; class Adaptee { public: void use220V() { cout << "工作电压为220v" << endl; } }; // 适配器 class Adapter : public Target, private Adaptee { public: virtual void use5v() { cout << "适配220v" << endl; this->use220V(); } }; void test() { Target *target = new Adapter(); target->use5v(); delete target; } int main() { test(); cin.get(); return 0; }
通过private继承Adaptee获得实现继承的效果,而通过public继承Target实现接口继承的效果
对象模式:
代码:
#include <iostream> using namespace std; class Target { public: virtual ~Target(){} public: virtual void use5v() { cout << "工作电压为5v" << endl; } }; class Adaptee { public: void use220V() { cout << "工作电压为220v" << endl; } }; // 适配器 class Adapter : public Target { public: Adapter(Adaptee *t) :_adaptee(t){} virtual void use5v() { cout << "适配220v" << endl; _adaptee->use220V(); } private: Adaptee *_adaptee; }; void test() { Adaptee *adaptee = new Adaptee(); Target *target = new Adapter(adaptee); target->use5v(); delete adaptee; delete target; } int main() { test(); cin.get(); return 0; }
适配器模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。