在软件系统设计和开发中,我们为了完成某项工作购买了一个第三方的库来加快开发。这就带来了一个问题:我们在应用程序中已经设计好了接口,与这个第三方提供的接口不一致,为了使得这些接口不兼容的类可以在一起工作,Adapter模式提供将一个类(第三方库)的接口转化为客户希望的接口。
Adapter模式的两种类别:类模式和对象模式
类模式:
Adapter.h:
#ifndef _ADAPTER_H_ #define _ADAPTER_H_ class Target { public: Target(); virtual ~Target(); virtual void Request(); protected: private: }; class Adaptee { public: Adaptee(); ~Adaptee(); void SpecificRequest(); protected: private: }; class Adapter:public Target,private Adaptee { public: Adapter(); ~Adapter(); void Request(); protected: private: }; #endif //~_ADAPTER_H_Adapter.cpp:
#include "Adapter.h" #include <iostream> Target::Target() { } Target::~Target() { } void Target::Request() { std::cout<<"Target::Request"<<std::endl; } Adaptee::Adaptee() { } Adaptee::~Adaptee() { } void Adaptee::SpecificRequest() { std::cout<<"Adaptee::SpecificRequest"<<std::endl; } Adapter::Adapter() { } Adapter::~Adapter() { } void Adapter::Request() { this->SpecificRequest(); }main.cpp:
#include "Adapter.h" #include <iostream> using namespace std; int main(){ Adaptee* ade = new Adaptee; Target* adt = new Adapter; adt->Request(); return 1; }
对象模式:
Adapter.h:
//Adapter.h #ifndef _ADAPTER_H_ #define _ADAPTER_H_ class Target { public: Target(); virtual ~Target(); virtual void Request(); protected: private: }; class Adaptee { public: Adaptee(); ~Adaptee(); void SpecificRequest(); protected: private: }; class Adapter:public Target { public: Adapter(Adaptee* ade); ~Adapter(); void Request(); protected: private: Adaptee* _ade; }; #endif //~_ADAPTER_H_Adapter.cpp:
//Adapter.cpp #include "Adapter.h" #include <iostream> Target::Target() { } Target::~Target() { } void Target::Request() { std::cout<<"Target::Request"<<std::endl; } Adaptee::Adaptee() { } Adaptee::~Adaptee() { } void Adaptee::SpecificRequest() { std::cout<<"Adaptee::SpecificRequest"<<std::endl; } Adapter::Adapter(Adaptee* ade) { this->_ade= ade; } Adapter::~Adapter() { } void Adapter::Request() { _ade->SpecificRequest(); }main.cpp:
#include "Adapter.h" #include <iostream> using namespace std; int main(){ Adaptee* ade = new Adaptee; Target* adt = new Adapter(ade); adt->Request(); return 1; }
原文:http://blog.csdn.net/starcuan/article/details/20295803