Adapter模式

来源:互联网 发布:辐射4 室内光源优化 编辑:程序博客网 时间:2024/06/15 11:51

在软件系统设计和开发中,我们为了完成某项工作购买了一个第三方的库来加快开发。这就带来了一个问题:我们在应用程序中已经设计好了接口,与这个第三方提供的接口不一致,为了使得这些接口不兼容的类可以在一起工作,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;}





0 0