目录
基本概念
适配器(Adapter)模式:将一个类的接口转换为客户希望的另一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
当系统的数据和行为都正常,但接口不负荷时,可以考虑使用适配器,目的是使控制范围之外的一个原有对象与某个接口匹配。适配器模式主要应用于希望复用一些现存的类,但是接口又与复用的环境要求不一致的情况。
什么时候使用适配器模式:
1. 使用一个已经存在的类,但如果它的接口,也就是它的方法和你的要求不同时使用。
2. 客户代码要求统一调用同一接口。
3. 双方都不太容易修改的时候再使用适配器模式;
本人在此总结下,这个就像套子一样,比如在某个结构里面,有了很多设计模式和功能,但我这个系统,又可以作为另外一个大系统的小功能,而那个大系统又有某种规范,此时给自己的系统带一个套子,使得他能顺利的进入那个大系统,按F进入坦克。哈哈哈!
代码与实例
结构如下所示(此图来源于大话设计模式):
程序运行截图如下:
源码如下:
Head.h
#ifndef HEAD_H
#define HEAD_H
//客户期待的接口,目标可以是具体的或者抽象的类,也可以是接口
class Target{
public:
virtual void request();
virtual ~Target();
};
//需要适配的类
class Adaptee{
public:
void specificRequest();
};
//通过内部包装一个Adaptee对象,把源接口转换为目标接口
class Adapter : public Target{
public:
void request();
~Adapter();
Adapter();
private:
Adaptee *adaptee;
};
#endif HEAD_H
Head.cpp
#include "Head.h"
#include <iostream>
#include <string>
using namespace std;
void Target::request()
{
cout << "普通请求!" << endl;
}
Target::~Target()
{
cout << "Target::~Target() called!" << endl;
}
void Adaptee::specificRequest()
{
cout << "特殊请求!" << endl;
}
void Adapter::request()
{
adaptee->specificRequest();
}
Adapter::~Adapter()
{
cout << "Adapter::~Adapter() called!" << endl;
}
Adapter::Adapter()
{
//建立一个私有的Adaptee对象
adaptee = new Adaptee;
}
Main.cpp
#include "Head.h"
#include <iostream>
#include <string>
using namespace std;
int main(int *argc, int *argv[]){
Target *target = new Adapter;
target->request();
delete target;
getchar();
return 0;
}