适配器模式:是将一个类的接口转换成客户想希望的另外一个接口。Adapter模式使得原本由于接口不兼容的而不能一起工作的那些类可以一起工作。
简单的来说是配置是解决主要一类问题:我们需要的东西就在面前,但是却不能用,短时间又无法改造它,于是我们就想办法适配它。比如说我们购买笔记本等电子产品时,经常会带一个电源适配器,这是因为我们家用点的电压是220V的,而一般的笔记本工作电压在16V到22V之间,因此为了使我们的笔记本能够正常工作,不至于直接介入家用电烧坏电脑,我们 就需要一个电源适配器,将家用电压220转换成笔记本的工作电压。这就是适配器的作用。同理适配器模式就是我们希望使用一个类的接口,但是这个接口与当前系统不兼容,我们就需要一个适配器去对这个接口做转换,是它适合当前系统。
软件开发中,系统的数据和行为都正确,但接口不符时我们有考虑使用适配器,目的是使控制范围之外的一个原有对象与某个接口适配。适配器模式主要应用于希望复用一些现存的类,但是接口又与复用环境要求不一致的情况,比如我们需要对早期代码复用一些功能等应用上很有实际价值。
GOF介绍的适配器模式分类类适配器和对象适配器,由于除C++之外其他语言不支持多重继承,因此只有C++可以实现类适配器。
通用类适配器的UML图(类适配器和对象适配器)
Target:定义Client使用的于特定领域相关的接口
Adaptee:定义一个已经存在的接口,这个接口需要适配
Adapter:对Adaptee和Target的接口进行适配。
何时使用适配器模式:
1、你想使用一个已经存在的类,而它的接口不符合你的要求
2、你想创建一个可以复用的类,该类可以与其他不相关或者不可预见的类(即那些接口可能不兼容的类)协同工作
3、(仅适用对象适配器)你想使用一些已经存在的类,但是不可能对每一个都进行子类化以匹配它们的接口,对象试用期可以适配它的父类接口。
下面提出通用型的对象适配器和类适配器代码:
Adapter.h
class Target
{
public:
~Target(){};
virtual void Request();
};
class Adaptee
{
public:
~Adaptee(){};
void SpecialRequest();
};
/*
//