您的位置:首页 > 编程语言 > C语言/C++

c++设计模式六,适配器模式

2017-09-28 13:24 417 查看
适配器模式,使用之处比较特殊,不属于常规设计模式,主要用于不同系统之间的处理。是将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。也是一个比较简单的模式,直接上代码了。

userinfo.h

#ifndef USERINFO_H
#define USERINFO_H
#include "iuserinfo.h"
#include <iostream>
using std::string;
class CUserInfo :
public IUserInfo
{
public:
CUserInfo(void);
~CUserInfo(void);
string GetUserName();
string GetHomeAddress();
string GetMobileNumber();
string GetOfficeTelNumber();
string GetJobPosition();
string GetHomeTelNumber();
};
#endif // USERINFO_H
userinfo.cpp
#include "UserInfo.h"
#include <iostream>
using std::cout;
using std::endl;
using std::string;
CUserInfo::CUserInfo(void)
{
}
CUserInfo::~CUserInfo(void)
{
}
string CUserInfo::GetUserName()
{
cout << "姓名叫做..." << endl;
return "0";
}
string CUserInfo::GetHomeAddress()
{
cout << "这里是员工的家庭地址..." << endl;
return "0";
}
string CUserInfo::GetMobileNumber()
{
cout << "这个人的手机号码是0000..." << endl;
return "0";
}
string CUserInfo::GetOfficeTelNumber()
{
cout << "办公室电话是..." << endl;
return "0";
}
string CUserInfo::GetJobPosition()
{
cout << "这个人的职位是BOSS..." << endl;
return "0";
}
string CUserInfo::GetHomeTelNumber()
{
cout << "员工的家庭电话是..." << endl;
return "0";
}
outeruserinfo.h
#ifndef OUTERUSERINFO_H
#define OUTERUSERINFO_H

#include "iuserinfo.h"
#include "OuterUser.h"
#include <iostream>
using std::string;
class COuterUserInfo :
public IUserInfo
{
public:
COuterUserInfo(void);
~COuterUserInfo(void);
string GetUserName();
string GetHomeAddress();
string GetMobileNumber();
string GetOfficeTelNumber();
string GetJobPosition();
string GetHomeTelNumber();
private:
COuterUser *m_pOuterUser;
};

#endif // OUTERUSERINFO_H
outeruserinfo.cpp
#include "outeruserinfo.h"

#include "OuterUserInfo.h"
#include "OuterUserBaseInfo.h"
#include "OuterUserHomeInfo.h"
#include "OuterUserOfficeInfo.h"
#include <iostream>
using std::cout;
using std::endl;
using std::string;
COuterUserInfo::COuterUserInfo(void)
{
m_pOuterUser = new COuterUser();
}
COuterUserInfo::~COuterUserInfo(void)
{
delete m_pOuterUser;
}
string COuterUserInfo::GetUserName()
{
COuterUserBaseInfo *pBaseInfo = m_pOuterUser->GetUserBaseInfo();
pBaseInfo->GetUserName();
delete pBaseInfo;
pBaseInfo = NULL;
return "0";
}
string COuterUserInfo::GetHomeAddress()
{
COuterUserHomeInfo *pHomeInfo = m_pOuterUser->GetUserHomeInfo();
pHomeInfo->GetHomeAddress();
delete pHomeInfo;
pHomeInfo = NULL;
return "0";
}
string COuterUserInfo::GetMobileNumber()
{
COuterUserBaseInfo *pBaseInfo = m_pOuterUser->GetUserBaseInfo();
pBaseInfo->GetMobileNumber();
delete pBaseInfo;
pBaseInfo = NULL;
return "0";
}
string COuterUserInfo::GetOfficeTelNumber()
{
COuterUserOfficeInfo *pOfficeInfo = m_pOuterUser->GetUserOfficeInfo();
pOfficeInfo->GetOfficeTelNumber();
delete pOfficeInfo;
pOfficeInfo = NULL;
return "0";
}
string COuterUserInfo::GetJobPosition()
{
COuterUserOfficeInfo *pOfficeInfo = m_pOuterUser->GetUserOfficeInfo();
pOfficeInfo->GetJobPosition();
delete pOfficeInfo;
pOfficeInfo = NULL;
return "0";
}
string COuterUserInfo::GetHomeTelNumber()
{
COuterUserHomeInfo *pHomeInfo = m_pOuterUser->GetUserHomeInfo();
pHomeInfo->GetHomeTelNumber();
delete pHomeInfo;
pHomeInfo = NULL;
return "0";
}
outeruser.h
#ifndef OUTERUSER_H
#define OUTERUSER_H
#include "OuterUserBaseInfo.h"
#include "OuterUserHomeInfo.h"
#include "OuterUserOfficeInfo.h"
class COuterUser
{
public:
COuterUser(void)
{
}
~COuterUser(void)
{
}
COuterUserBaseInfo * GetUserBaseInfo();
COuterUserHomeInfo * GetUserHomeInfo();
COuterUserOfficeInfo * GetUserOfficeInfo();
};
#endif // OUTERUSER_H
outeruser.cpp
#include "outeruser.h"

#include "OuterUserBaseInfo.h"
#include "OuterUserHomeInfo.h"
#include "OuterUserOfficeInfo.h"

COuterUserBaseInfo * COuterUser::GetUserBaseInfo()
{
return new COuterUserBaseInfo();
}
COuterUserHomeInfo * COuterUser::GetUserHomeInfo()
{
return new COuterUserHomeInfo();
}
COuterUserOfficeInfo * COuterUser::GetUserOfficeInfo()
{
return new COuterUserOfficeInfo();
}
iouteruser.h
#ifndef IOUTERUSER_H
#define IOUTERUSER_H
#include "OuterUserBaseInfo.h"
#include "OuterUserHomeInfo.h"
#include "OuterUserOfficeInfo.h"
class IOuterUser
{
public:
IOuterUser(void)
{
}
~IOuterUser(void)
{
}
COuterUserBaseInfo * GetUserBaseInfo();
COuterUserHomeInfo * GetUserHomeInfo();
COuterUserOfficeInfo * GetUserOfficeInfo();
};
#endif // IOUTERUSER_H
iuserinfo.h
#ifndef IUSERINFO_H
#define IUSERINFO_H
#include <iostream>
using std::string;
class IUserInfo
{
public:
IUserInfo(void)
{
}
virtual ~IUserInfo(void)
{
}
virtual string GetUserName() = 0;
virtual string GetHomeAddress() = 0;
virtual string GetMobileNumber() = 0;
virtual string GetOfficeTelNumber() = 0;
virtual string GetJobPosition() = 0;
virtual string GetHomeTelNumber() = 0;
};
#endif // IUSERINFO_H
outeruserbaseinfo.h
#ifndef OUTERUSERBASEINFO_H
#define OUTERUSERBASEINFO_H
#include <iostream>
using std::cout;
using std::endl;
using std::string;
class COuterUserBaseInfo
{
public:
COuterUserBaseInfo(void)
{
}
~COuterUserBaseInfo(void)
{
}
string GetUserName()
{
cout << "姓名叫做..." << endl;
return "0";
}
string GetMobileNumber()
{
cout << "这个人的手机号码是0001..." << endl;
return "0";
}
};
#endif // OUTERUSERBASEINFO_H
outeruserhomeinfo.h
#ifndef OUTERUSERHOMEINFO_H
#define OUTERUSERHOMEINFO_H
#include <iostream>
using std::cout;
using std::endl;
using std::string;
class COuterUserHomeInfo
{
public:
COuterUserHomeInfo(void)
{
}
~COuterUserHomeInfo(void)
{
}
string GetHomeAddress()
{
cout << "这里是员工的家庭地址..." << endl;
return "0";
}
string GetHomeTelNumber()
{
cout << "员工的家庭电话是..." << endl;
return "0";
}
};
#endif // OUTERUSERHOMEINFO_H
outeruserofficeinfo.h
#ifndef OUTERUSEROFFICEINFO_H
#define OUTERUSEROFFICEINFO_H
#include <iostream>
using std::cout;
using std::endl;
using std::string;
class COuterUserOfficeInfo
{
public:
COuterUserOfficeInfo(void)
{
}
~COuterUserOfficeInfo(void)
{
}
string GetOfficeTelNumber()
{
cout << "办公室电话是..." << endl;
return "0";
}
string GetJobPosition()
{
cout << "这个人的职位是BOSS..." << endl;
return "0";
}
};
#endif // OUTERUSEROFFICEINFO_H
main.cpp

#include "IOuterUser.h"
#include "IUserInfo.h"
#include "UserInfo.h"
#include "OuterUserInfo.h"

void DoIt()
{
IUserInfo *pYourGirl = new CUserInfo();
for(int i = 0; i < 101; i += 20)
{
pYourGirl->GetMobileNumber();
}
delete pYourGirl;
}

void NowDoIt()
{
IUserInfo *pYourGirl = new COuterUserInfo();

for(int i = 0; i < 101; i += 20)
{
pYourGirl->GetMobileNumber();
}

delete pYourGirl;
}
int main(int argc, char* argv[])
{

DoIt();

NowDoIt();

_CrtSetDbgFlag(_CRTDBG_LEAK_CHECK_DF | _CRTDBG_ALLOC_MEM_DF);
_CrtDumpMemoryLeaks();
return 0;
}




运行结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: