Adapter
今天是第一次在Mac book上编程,与在windows上写代码相比,既新鲜又充斥在许多小问题,还好很快掌握了
Adapter:
适配器Adapter是一种结构设计模式,其主要作用是允许不兼容的对象间通过一个转换接口协同工作。
适配器本身扮演的角色是两个对象间的包装器,通过对不兼容的对象进行包装从而生成目标对象的统一接口。
其实现就是适配器从目标对象继承,然后聚合不兼容的对象
#include <iostream>
#include <string>
class Target
{
public:
virtual ~Target() = default;
virtual std::string Request() const
{
return "Target: The default target's behavior.";
}
};
class Adaptee
{
public:
std::string SpecificRequest() const{
return ".eetpadA eht fo rovivaheb laicepS";
}
};
class Adapter : public Target
{
private:
Adaptee *m_pAdaptee;
public:
Adapter(Adaptee* pAdaptee):m_pAdaptee(pAdaptee){
}
virtual std::string Request() const override{
std::string to_reverse = this->m_pAdaptee->SpecificRequest();
std::reverse(to_reverse.begin(), to_reverse.end());
return "Adapter:(TRANSLATED) " + to_reverse;
}
};
void ClientCode(const Target* pTarget){
std::cout << pTarget->Request();
}
int main()
{
std::cout << "Client: I can work just like fine with the Target objects:\n";
Target* pTarget =new Target;
ClientCode(pTarget);
std::cout << "\n" << std::endl;
Adaptee* pAdaptee = new Adaptee;
std::cout << "Client: The Adaptee class has a weird interface. See, I don't understand\n";
std::cout << "Adapte: " << pAdaptee->SpecificRequest();
std::cout << "\n\n";
std::cout << "Client: But I can work with it via the Adapter:\n";
Adapter* pAdapter = new Adapter(pAdaptee);
ClientCode(pAdapter);
std::cout << "\n";
delete pTarget;
pTarget = NULL;
delete pAdaptee;
pAdaptee = NULL;
delete pAdapter;
pAdapter = NULL;
return 0;
}
mac book上编译:
g++ -std=c++11 -o adapter adapter.cpp