您的位置:首页 > 健康 > 养生 > 【设计模式】适配器

【设计模式】适配器

2024/10/6 5:58:15 来源:https://blog.csdn.net/2301_79867980/article/details/139120280  浏览:    关键词:【设计模式】适配器

来源:爱编程的大丙

STL标准模板库有六大组件,其中之一就是适配器

六大组件分别是:容器、算法、迭代器、仿函数、空间适配器

适配器可以分为:容器适配器、函数适配器、迭代器适配器

适配器,相当于沟通的桥梁。将一个类的接口转换成用户希望的另一个接口,是不兼容的对象能够互相配合在一起工作,这种模式叫做适配器模式

外国人分为美国人和法国人,他们讲不同的语言,继承一个Foreigner父类,父类有confession()方法返回一个字符串,一个setResult()接受熊猫的回复,子类美国人和法国人需重写confession()方法。

Panda类接收和发送回复。

翻译类。两种语言,子类英语翻译器和法语翻译器继承父类翻译,继承父类构造函数,重写translateToPanda()和translateToHuman()方法,translateToPanda()接收m_foreigner->confession()忏悔并输出, translateToHuman()接收m_panda.sendMessage()回复并输出

#include<iostream>
#include<string>
using namespace std;class Foreigner {
public:virtual string confession() = 0;void setResult(string msg) {cout << "Panda Say: " << msg << endl;}virtual ~Foreigner() {}
};//美国人
class American :public Foreigner {
public:string confession() override {return string("我是畜生, 我有罪!!!");}
};
//法国人
class French :public Foreigner {
public:string confession() override {return string("我是强盗, 我该死!!!");}
};//大熊猫
class Panda {
public:void recvMessage(string msg) {cout << msg << endl;}string sendMessage() {return string("强盗、凶手、罪人是不可能被宽恕和原谅的!");}
};//抽象乔巴翻译适配器类
class AbstractChopper {
public:AbstractChopper(Foreigner* foreigner):m_foreigner(foreigner) {}virtual void translateToPanda() = 0;virtual void translateToHuman() = 0;virtual ~AbstractChopper() {}
protected:Panda m_panda;Foreigner* m_foreigner=nullptr;
};//英语乔巴
class EnglishChopper :AbstractChopper {
public:using AbstractChopper::AbstractChopper;//继承构造函数void translateToPanda() override {string msg = m_foreigner->confession();m_panda.recvMessage("美国人说:" + msg);}void translateToHuman() override {string msg = m_panda.sendMessage();m_foreigner->setResult("美国佬," + msg);}
};//英语乔巴
class FrechhChopper :AbstractChopper {
public:using AbstractChopper::AbstractChopper;void translateToPanda() override {string msg = m_foreigner->confession();m_panda.recvMessage("法国人说:" + msg);}void translateToHuman() override {string msg = m_panda.sendMessage();m_foreigner->setResult("法国佬," + msg);}
};
int main() {Foreigner* human = new American;EnglishChopper* american = new EnglishChopper(human);american->translateToPanda();american->translateToHuman();delete human;delete american;return 0;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com