---这片文章是从一个PPT上抄下来的,感觉PPT讲的比较易懂。自己学习用的。---
适配器模式定义:
将两个不兼容的类纠合在一起使用,属于结构型模式,需要有Adaptee(被适配者)和Adaptor(适配器)两个身份。
应用:
如果你在中国买了个笔记本电脑,然后你现在要去美国,美国那边电源插口和中国肯定是不一样的,你要买个转接头把那边的插头转换成前面圆形后面扁形的那种美式插头,这就是适配器。在编程实现中,Adapter模式就是将一个类的接口转换成客户希望的另一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
常见的情景:
(1)系统需要使用现有的类,而此类的接口不符合系统的需要。
(2)想要建立一个可以重复使用的类,用于一些彼此之间没有太大关联的一些类,包括一些可能在将来引用的类一起工作,这些类不一定有一致的接口。
(3)通过接口转换,将一个类插入另一个类系中。有人举过这样一个例子:虎与飞禽是没有直接联系的两类动物,但是现在出来了个“飞虎”,它同时具有虎肉食动物跟飞禽会飞的特质,要在飞禽这个类系中添加一个成员类“飞虎”出来直接实现飞虎类,还有一种简单的方法是实现一个Adapter类,在其中包含一个虎的对象,同时实现飞禽的接口即可。当然,对于这个问题,多继承或者实现接口可能是一个更直观的办法,在实际应用中,可视具体需要确定采用何种作法。
代码实现:
下面是Adapter.h。
//需要被adapt的类
class Target
{
public:
Target(){};
virtual ~Target(){};
virtual void Request()=0;
};
class Adaptee
{
public:
Adaptee(){};
~Adaptee(){};
void SpecialRequest();
};
class Adapter:public Target
{
public:
Adapter(Adaptee* pAdaptee);
virtual ~Adapter();
virtual void Request();
private:
Adaptee* m_pAdaptee;
};
下面是Adapter.cpp的代码:
#include "Adapter.h"
#include <iostream>
void Adaptee::SpecialRequest()
{
std::cout<<"SpecialRequest of Adaptee\n";
}
Adapter::Adapter(Adaptee* pAdaptee):m_pAdaptee(pAdaptee)
{
}
Adapter:: ~Adapter()
{
delete m_pAdaptee;
m_pAdaptee=NULL;
}
void Adapter::Request()
{
std::cout<<"Request of Adapter\n";
m_pAdaptee->SpecialRequest();
}
下面是MIAN.cpp:
#include "Adapter.h"
#include <stdlib.h>
int main()
{
Adaptee *pAdaptee = new Adaptee;
Target *pTarget = new Adapter(pAdaptee);
pTarget->Request();
delete pTarget;
system("pause");
return 0;
}
/*
执行结果:
Request of Adapter
SpecialRequest of Adaptee
*/
结束。