- Adapter模式
- 类模式
- 对象模式
Adapter模式
在软件开发过程中,经常会使用第三方库。如果使用第三方库,那么我们对客户提供的接口和第三方库的接口不一致时,应该怎么解决。这是Adapter模式要解决的问题。即把一个类的接口转化为客户希望的接口。
Adatper模式的实现这里给出2中模式:类模式和对象模式。
类模式中,Adapter类继承和复用Adaptee的接口;而对象模式中,Adapter采用组合的方式来调用Adaptee中的接口。
类模式中,类的结构如下:
下面给出实现:
类模式
//Adapter.h
//Adapter.h
#ifndef _ADAPTER_H_
#define _ADAPTER_H_
class Target
{
public:
Target();
virtual ~Target();
virtual void Request();
};
class Adaptee
{
public:
Adaptee();
~Adaptee();
void SpecificRequest();
};
class Adapter :public Target, private Adaptee
{
public:
Adapter();
~Adapter();
void Request();
};
#endif
//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()
{}
Adapter::~Adapter()
{}
void Adapter::Request()
{
this->SpecificRequest();
}
//main.cpp
#include"Adapter.h"
int main()
{
Target* adt = new Adapter();
adt->Request();
return 0;
}
对象模式
对象模式中,类的结构如下:
//Adapter.h
//Adapter.h
#ifndef _ADAPTER2_H_
#define _ADAPTER2_H_
class Target
{
public:
Target();
virtual ~Target();
virtual void Request();
};
class Adaptee
{
public:
Adaptee();
~Adaptee();
void SpecificRequest();
};
class Adapter :public Target
{
public:
Adapter(Adaptee* ade);
~Adapter();
void Request();
private:
Adaptee* _ade;
};
#endif
//Adapter.cpp
//Adapter.cpp
#include"Adapter2.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)
{
_ade = ade;
}
Adapter::~Adapter()
{}
void Adapter::Request()
{
_ade->SpecificRequest();
}
//main.cpp
#include"Adapter2.h"
int main()
{
Target* adt = new Adapter(new Adaptee());
adt->Request();
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-10 22:03:54