c++设计模式六,适配器模式
2017-09-28 13:24
417 查看
适配器模式,使用之处比较特殊,不属于常规设计模式,主要用于不同系统之间的处理。是将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。也是一个比较简单的模式,直接上代码了。
userinfo.h
运行结果:
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_Huserinfo.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_Houteruserinfo.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_Houteruser.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_Hiuserinfo.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_Houteruserbaseinfo.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_Houteruserhomeinfo.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_Houteruserofficeinfo.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_Hmain.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; }
运行结果:
相关文章推荐
- c++ 设计模式之适配器模式
- 设计模式C++版:第三式适配器模式
- 设计模式C++实现--适配器模式
- C++设计模式——适配器模式
- c++设计模式之适配器模式
- C++与设计模式(3)——适配器模式
- 设计模式C++实现(3)——适配器模式
- 设计模式—适配器模式—C++
- 设计模式之适配器模式(c++ )
- C++设计模式之适配器模式(改编自C++设计模式)
- 设计模式C++实现(3)——适配器模式
- 设计模式C++实现十三:适配器模式
- 设计模式 - 适配器模式 C++
- c++设计模式之适配器模式
- 设计模式C++实现(3)——适配器模式
- c++设计模式之适配器模式
- 设计模式C++实现(3)——适配器模式
- c++设计模式之适配器模式
- 我所理解的设计模式(C++实现)——适配器模式(Adapter Pattern)
- C++设计模式之适配器模式(二)