MediatorPattern.cpp 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. #include "MediatorPattern.h"
  2. using namespace MediatorPattern;
  3. void MediatorPattern::Alabasta::Declare(std::string msg, std::string country)
  4. {
  5. m_mediator->Declare(msg, this, country);
  6. }
  7. void MediatorPattern::Alabasta::setMessage(std::string msg)
  8. {
  9. SPDLOG_INFO("阿拉巴斯坦得到的消息: {}", msg);
  10. }
  11. std::string MediatorPattern::Alabasta::getName()
  12. {
  13. return "阿拉巴斯坦";
  14. }
  15. void MediatorPattern::Dressrosa::Declare(std::string msg, std::string country)
  16. {
  17. m_mediator->Declare(msg, this, country);
  18. }
  19. void MediatorPattern::Dressrosa::setMessage(std::string msg)
  20. {
  21. SPDLOG_INFO("德雷斯罗萨得到的消息: {}", msg);
  22. }
  23. std::string MediatorPattern::Dressrosa::getName()
  24. {
  25. return "德雷斯罗萨";
  26. }
  27. void MediatorPattern::Lulusia::Declare(std::string msg, std::string country)
  28. {
  29. m_mediator->Declare(msg, this, country);
  30. }
  31. void MediatorPattern::Lulusia::setMessage(std::string msg)
  32. {
  33. SPDLOG_INFO("露露西亚得到的消息: {}", msg);
  34. }
  35. std::string MediatorPattern::Lulusia::getName()
  36. {
  37. return "露露西亚";
  38. }
  39. void MediatorPattern::Kamabaka::Declare(std::string msg, std::string country)
  40. {
  41. m_mediator->Declare(msg, this, country);
  42. }
  43. void MediatorPattern::Kamabaka::setMessage(std::string msg)
  44. {
  45. SPDLOG_INFO("卡玛巴卡得到的消息: {}", msg);
  46. }
  47. std::string MediatorPattern::Kamabaka::getName()
  48. {
  49. return "卡玛巴卡";
  50. }
  51. void MediatorPattern::AbstractMediator::addCountry(AbstractCountry* country)
  52. {
  53. m_mapCountry[country->getName()] = country;
  54. }
  55. void MediatorPattern::WorldGovernment::Declare(std::string message, AbstractCountry* country, std::string name)
  56. {
  57. if(m_mapCountry.find(name) != m_mapCountry.end())
  58. {
  59. SPDLOG_DEBUG("[WorldGovernment] <{}>向<{}>宣布消息: {}", country->getName(), name, message);
  60. m_mapCountry[name]->setMessage(message);
  61. } else
  62. {
  63. SPDLOG_WARN("[WorldGovernment] 未找到国家: {}", name);
  64. }
  65. }
  66. void MediatorPattern::GeMingLeague::Declare(std::string message, AbstractCountry* country, std::string name)
  67. {
  68. std::string msg = fmt::format("[GeMingLeague] 消息通报, 来自[{}]: {}", country->getName(), message);
  69. for(auto& pair : m_mapCountry)
  70. {
  71. if(pair.second->getName() != country->getName())
  72. {
  73. pair.second->setMessage(msg);
  74. }
  75. }
  76. }
  77. void MediatorPattern::testMediatorPattern()
  78. {
  79. /* 世界政府 */
  80. WorldGovernment* worldGov = new WorldGovernment();
  81. AbstractCountry* alabasta = new Alabasta(worldGov);
  82. AbstractCountry* dressrosa = new Dressrosa(worldGov);
  83. worldGov->addCountry(alabasta);
  84. worldGov->addCountry(dressrosa);
  85. // 世界政府成员发声
  86. alabasta->Declare("德雷斯罗萨倒卖军火, 搞得我国连年打仗, 必须给个说法!!!", dressrosa->getName());
  87. dressrosa->Declare("天龙人都和我多弗朗明哥做生意, 你算老几, 呸!!!", alabasta->getName());
  88. SPDLOG_INFO("--------------------------------------------------------------------------");
  89. /* 革命军 */
  90. GeMingLeague* gemingLeague = new GeMingLeague();
  91. AbstractCountry* lulusia = new Lulusia(gemingLeague);
  92. AbstractCountry* kamabaka = new Kamabaka(gemingLeague);
  93. gemingLeague->addCountry(lulusia);
  94. gemingLeague->addCountry(kamabaka);
  95. lulusia->Declare("我草, 我的国家被伊姆毁灭了!!!", lulusia->getName());
  96. SPDLOG_INFO("测试完成!");
  97. }