123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- #ifndef ADAPTER_H
- #define ADAPTER_H
- #include "spdlog/spdlog.h"
- #include <string>
- /* 强盗类 */
- class Foreigner
- {
- public:
- /* 忏悔 */
- virtual std::string confession() = 0;
- void setResult(std::string result)
- {
- SPDLOG_INFO("熊猫说:{}", result);
- }
- virtual ~Foreigner() {}
- };
- /* 美国人 */
- class American : public Foreigner
- {
- public:
- std::string confession() override
- {
- return "我是美国人,我是强盗";
- }
- };
- /* 法国人 */
- class French : public Foreigner
- {
- public:
- std::string confession() override
- {
- return "我是法国人,我是强盗";
- }
- };
- /* 熊猫类 */
- class Panda
- {
- public:
- void receiveMsg(std::string& msg)
- {
- SPDLOG_INFO("熊猫收到消息:{}", msg);
- }
- std::string sendMsg()
- {
- return "强盗、凶手、罪人是不可能被宽恕和原谅的!";
- }
- };
- /* 抽象翻译类 */
- class AbstractTranslator
- {
- public:
- AbstractTranslator(Foreigner* foreigner) : m_foreign(foreigner) {}
- virtual ~AbstractTranslator() {}
- virtual void translateToForeigner() = 0;
- virtual void translateToPanda() = 0;
- protected:
- Foreigner* m_foreign = nullptr;
- Panda m_panda;
- };
- /* 英语适配器翻译机 */
- class EnglishAdapter : public AbstractTranslator
- {
- public:
- /* 继承父类的所有构造函数 */
- using AbstractTranslator::AbstractTranslator;
- void translateToForeigner() override
- {
- std::string msg = m_panda.sendMsg();
- m_foreign->setResult(msg);
- }
- void translateToPanda() override
- {
- std::string msg = m_foreign->confession();
- m_panda.receiveMsg(msg);
- }
- };
- /* 法语适配器翻译机 */
- class FrenchAdapter : public AbstractTranslator
- {
- public:
- /* 继承父类的所有构造函数 */
- using AbstractTranslator::AbstractTranslator;
- void translateToForeigner() override
- {
- std::string msg = m_panda.sendMsg();
- m_foreign->setResult(msg);
- }
- void translateToPanda() override
- {
- std::string msg = m_foreign->confession();
- m_panda.receiveMsg(msg);
- }
- };
- #endif /* APADTER_H */
|