Adapter.h 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. #ifndef ADAPTER_H
  2. #define ADAPTER_H
  3. #include "spdlog/spdlog.h"
  4. #include <string>
  5. /* 强盗类 */
  6. class Foreigner
  7. {
  8. public:
  9. /* 忏悔 */
  10. virtual std::string confession() = 0;
  11. void setResult(std::string result)
  12. {
  13. SPDLOG_INFO("熊猫说:{}", result);
  14. }
  15. virtual ~Foreigner() {}
  16. };
  17. /* 美国人 */
  18. class American : public Foreigner
  19. {
  20. public:
  21. std::string confession() override
  22. {
  23. return "我是美国人,我是强盗";
  24. }
  25. };
  26. /* 法国人 */
  27. class French : public Foreigner
  28. {
  29. public:
  30. std::string confession() override
  31. {
  32. return "我是法国人,我是强盗";
  33. }
  34. };
  35. /* 熊猫类 */
  36. class Panda
  37. {
  38. public:
  39. void receiveMsg(std::string& msg)
  40. {
  41. SPDLOG_INFO("熊猫收到消息:{}", msg);
  42. }
  43. std::string sendMsg()
  44. {
  45. return "强盗、凶手、罪人是不可能被宽恕和原谅的!";
  46. }
  47. };
  48. /* 抽象翻译类 */
  49. class AbstractTranslator
  50. {
  51. public:
  52. AbstractTranslator(Foreigner* foreigner) : m_foreign(foreigner) {}
  53. virtual ~AbstractTranslator() {}
  54. virtual void translateToForeigner() = 0;
  55. virtual void translateToPanda() = 0;
  56. protected:
  57. Foreigner* m_foreign = nullptr;
  58. Panda m_panda;
  59. };
  60. /* 英语适配器翻译机 */
  61. class EnglishAdapter : public AbstractTranslator
  62. {
  63. public:
  64. /* 继承父类的所有构造函数 */
  65. using AbstractTranslator::AbstractTranslator;
  66. void translateToForeigner() override
  67. {
  68. std::string msg = m_panda.sendMsg();
  69. m_foreign->setResult(msg);
  70. }
  71. void translateToPanda() override
  72. {
  73. std::string msg = m_foreign->confession();
  74. m_panda.receiveMsg(msg);
  75. }
  76. };
  77. /* 法语适配器翻译机 */
  78. class FrenchAdapter : public AbstractTranslator
  79. {
  80. public:
  81. /* 继承父类的所有构造函数 */
  82. using AbstractTranslator::AbstractTranslator;
  83. void translateToForeigner() override
  84. {
  85. std::string msg = m_panda.sendMsg();
  86. m_foreign->setResult(msg);
  87. }
  88. void translateToPanda() override
  89. {
  90. std::string msg = m_foreign->confession();
  91. m_panda.receiveMsg(msg);
  92. }
  93. };
  94. #endif /* APADTER_H */