1.目的
某个对象(People1)有一个接口(getAge()),当我们想使用它的时候发现,我们需要用到这个接口的场景(client的setage())与这个接口类似却并不相同(入参、返回值等等限制),不能直接使用,这个时候,我们不用修改目标类的实现(增加或者修改类的接口),而是我们就构造一个适配器类(Wrapper),持有这个目标对象(people1),并在这个类中,做接口的转换,将目标对象的接口转换成我们需要的接口形式。
通过Wrapper方式,就可以做到对目标对象符合开闭原则,即不用修改目标对象的代码,而实现了接口的匹配。
适配器去实现(继承)待适配的接口,适配器与真正的接口实现者有两种实现方式,一种是委托,适配器将接口委托给接口实现者去实现,另外就是适配器去继承接口实现者的接口,并在里面做出适配
2.代码
Adapter,h
#ifndef ADAPTER_H_
#define ADAPTER_H_
class People1
{
public:
People1(int);
int getAge();
private:
int age;
};
class Wrapper
{
public:
Wrapper(People1&);
char getAge();
private:
People1* people;
};
class Client
{
public:
void setAge(char);
char getAge();
private:
char age;
};
#endif /* ADAPTER_H_ */
Adapter.cpp
#include "Adapter.h"
#include <iostream>
using namespace std;
People1::People1(int arg):age(arg)
{}
int People1::getAge()
{
return age;
}
Wrapper::Wrapper(People1& arg):people(&arg)
{}
char Wrapper::getAge()
{
return (char)people->getAge();
}
void Client::setAge(char arg)
{
age = arg;
}
char Client::getAge()
{
return age;
}
void adapter()
{
People1 boy(11);
Wrapper wrapper(boy);
Client client;
client.setAge(wrapper.getAge());
cout<<client.getAge()<<endl;
}