C++设计模式详解之适配者模式解析
原创
©著作权归作者所有:来自51CTO博客作者DT陶喆的原创作品,请联系作者获取转载授权,否则将追究法律责任
C++ 适配器模式解析
适配器模式概念
- 将一个类的接口,转换成客户端期望的另一个接口。适配器让原先接口不兼容的类可以合作无间。
适配器实例
- 最简单的示例就是常规3.5mm耳机插入苹果7以上的手机,需要转接头的需求。
很明显来说,转接头需要能继承于3.5mm耳机,正面又得是苹果耳机的头,这就涉及到继承问题,即转接头首先得继承于正常耳机,后面插入的方式得是苹果耳机方式。
用适配器模式来表达就很好表达
头文件:
定义正常耳机,插槽 转接头的关系
#include "stdafx.h"
//3.5mm 耳机
class MicroEarPhone
{
public:
virtual void enterMethod(); //插孔方式
};
//苹果插槽
class IPhoneSlot
{
public:
virtual void beEnterMethod();
};
//耳机转接头
//首先需要后面能被3.5mm耳机插,需要继承
class EarphoneAdapter:public MicroEarPhone
{
public:
EarphoneAdapter(IPhoneSlot * cur_slot);
virtual void enterMethod();
private:
IPhoneSlot* m_IPhone;
};
接下来是实现
//适配器模式实例
//苹果
#include "stdafx.h"
#include "AdapterMode.h"
using namespace std;
void MicroEarPhone::enterMethod()
{
cout << "这是3.5mm耳机" << endl;
}
void IPhoneSlot::beEnterMethod()
{
cout << "苹果7的耳机孔" << endl;
}
EarphoneAdapter::EarphoneAdapter(IPhoneSlot * cur_slot)
{
m_IPhone = cur_slot;
}
void EarphoneAdapter::enterMethod()
{
MicroEarPhone::enterMethod();
cout << "使用转接头" << endl;
m_IPhone->beEnterMethod();//然后进入正常转接
}
int _tmain(int argc, _TCHAR* argv[])
{
IPhoneSlot * cur_iphone = new IPhoneSlot();
MicroEarPhone * cur_ear = new EarphoneAdapter(cur_iphone);
cur_ear->enterMethod();
delete cur_ear;
delete cur_iphone;
system("pause");
return 0;
}
运行结果:
所以很容易的看出实现了适配器模式。