C++设计模式详解之适配者模式解析

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;
}


运行结果:

所以很容易的看出实现了适配器模式。

发布了365 篇原创文章 · 获赞 80 · 访问量 35万+

猜你喜欢

转载自blog.csdn.net/Giser_D/article/details/103894985