适配器模式是将一个类的接口转换成我们想要的接口,如类A和类B分别有接口virtual void getinfoA(), virtual void getinfoB(), 如果我们想不管使用哪个类对象都调用getinfoA,应该如何做呢?这个例子不太明显,可以参考去不同地区国家的时候需要带充电适配器。
我们可以使用适配者模式,他可以将由于接口不兼容而不能一起工作的类很好的合作完成工作
class adapt_testA {
public:
virtual std::string getname() {
return str_name_;
}
private:
std::string str_name_;
};
class adapt_testB {
public:
adapt_testB(std::string str) :str_name_(str) {}
virtual std::string gettestname() {
return str_name_;
}
private:
std::string str_name_;
};
class adapt : adapt_testA {
public:
adapt(const std::shared_ptr<adapt_testB>& sp) : sp_testb_(sp) {}
std::string getname() {
if (sp_testb_) {
return sp_testb_->gettestname();
}
return "";
}
private:
std::shared_ptr<adapt_testB> sp_testb_;
};
int main() {
{
std::shared_ptr<adapt> sp(std::make_shared<adapt>(std::make_shared<adapt_testB>("aaa")));
std::cout << sp->getname() << std::endl;
}
return 0;
}